第九章_Linux Shell编程.pdf
《第九章_Linux Shell编程.pdf》由会员分享,可在线阅读,更多相关《第九章_Linux Shell编程.pdf(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章 Linux Shell编程第九章 Linux Shell编程Linux-system 09Linux-system 09第九章 Linux Shell编程第九章 Linux Shell编程9.1 Linux shell9.2 Bash shell9.3 SHELL 变量9.4 SHELL 函数9.5 SHELL 编程9.1 Linux shell Linux只是一个内核,发行版是在内核基础上添加了一些 应用程序库和应用软件,shell是一个命令解析器命令解析器,它能 够将用户输入的命令解析为内核能够了解的指令,并且将 命令传递给内核由内核来负责将指令发送给硬件,后由硬 件执行相关的动作
2、,shell为我们提供一个人机交互的界 面。Shell内核用户输入命令:如ls、cd、make9.1 Linux shellshell的作用:shell的作用:shell遵循一定的语法,将输入的命令加以解释后传给系统,shell为 用户提供一个向系统发送请求以便运行程序界面的接口,用户可以用 shell来编写一些程序或者脚本。Shell是用C语言编写的程序,它是用户和linux沟通的桥梁.shell是一种命令语言,又是一种程序设计语言.1、作为命令语言,提供用户和SHELL的交互。2、作为程序设计语言,提供各种变量和参数,并提供了在高级语言中才具 有的结构控制,包括循环和分支。shell虽然不
3、是linux系统的一部分,但它调用了系统核心的大部分功能来执行程序.9.1 Linux shellshell的种类:ash,bash,ksh,csh,zshshell的种类:ash,bash,ksh,csh,zshash ash 是由Kenneth Almquist编写的,是Linux中占用系统资 源最少的一个小Shell,它只包含24个内部命令,因而使 用起来很不方便ksh ksh 是Korn shell的缩写,由Eric Gisin编写,共有42条内 部命令csh csh 是Linux比较大的内核,它由以William Joy为代表的共 计47位作者编成,共有52个内部命令。该Shell其
4、实是指 向/bin/tcsh的,也就是说,csh其实就是tcshzsh zsh 是Linux最大的Shell之一,由Paul Falstad完成,共有 84个内部命令。如果只是一般的用途,是没有必要安装这 样的Shell的。9.1 Linux shellbash bash 是Bourne Again Shell的缩写也是linux系统默认使用的shell,由Brian Fox和Chet Ramey共同完成.提供40个内部命令.是sh的一个 改进版本,兼容所有sh下运行的脚本,还从ksh中合并了许多特性也将 csh中的一些特性吸收到了bash中,这也意味着在csh和ksh上编写的脚 本一样能在b
5、ash环境下很好的运行.bash主要有以下特色:(1)可以使用类似DOS下面doskey的功能,用上下方向键查阅和快速输 入并修改命令。(2)自动通过查找匹配的方式,给出以某字串开头的命令。(3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到 相关的帮助。9.2 Bash shellLinux上最流行的就是Bash shell,这也是我们要课程中学 习的shell。有三种类型的shell:1、login shell2、normal shell3、interactive shellBash配置文件包括:(依据你的linux发行版)/etc/profile/etc/bashrc/.
6、bash/.profile每一个shell环境,其设置可以用set-o来查看9.2 Bash shell/etc目录下的bash文件是全局bash,而本地的bash文件是用户定 义和使用的。有的发行版还有其他的配置文件:如.bash_login和 bash_profile。bash的启动过程:当bash作为交互式login shell激活时,首先从/etc/profile中读入 命令并执行,并创建所有用户的公共设置。shell将查找用户登录初 始目录下的个人定制文件:/.bash_profile、/.bash_login、./bash_login、.bashrc或/.profile。9.3 S
7、HELL 变量通配符通配符:用于文件名匹配,路径匹配,字串查找等单个字符:ls l f?显示所有以f开头后有单个字符的文件,如fg。范围中的字符:ls l fa-g 显示以f开头后包含a-g任意字符的,文 件如fa,fb等。任意字符:ls l f*显示以f开头后任意字符的文件,如fg,fhh,free。变量变量:利用“”来赋值,在等号两边不要是用空格。例如:rootlocalhost/hthongtu9.3 SHELL 变量引号引号:在shell中引号分为三种:单引号,双引号,反引号单引号括起来的字符都作为普通字符出现。特殊字符如果用单引号括 起来以后,会失去原有的特殊含义,只做普通字符解释。
8、1、定义一个变量:ht=hongtu显示变量ht:echo$ht屏幕上会显示hongtu2、如果加上单引号:echo$ht屏幕上只会显示$ht而不会再显示hongtu了。9.3 SHELL 变量双引号 双引号:由双引号括起来的字符,除$、和这几个特殊字符仍是特殊字符 以外其它字符都当做普通字符对待。echo$ht 显示$ht如果用echo“$ht”便会显示hongtu在shell的作用是转义字符反引号反引号:被反引号括起来的字串被shell认为是命令行,在执行时shell 首先执 行该命令行,并以它的标准输出取代反引号。当执行pwd命令时,显示路径:/home/dgtraing/abc定义变量
9、string=”your path is pwd”echo$string屏幕上显示:your path is/home/ht/abc9.3 SHELL 变量练习:hi=hello!I love linux!lcd=cat hi lin=linux wor=worldlinux=echo$lcd$lin$worecho$lcd$lin$worecho“$hi”说说2个echo分别显示什么内容9.3 Shell 变量重定向重定向:linux的shell功能非常多,其中有一个功能就是让用户把几个 不同的程序”胶合”到一起,通常用户会碰到想把一个程序的输出保存到 一个文件,或者将一个程序的输出结果给另
10、外一个程序.这个时候就 可以使用shell的重定向功能。date星期三 1月 15 14:33:02 GMT+8 2010date today.txt屏幕上什么也没有显示,执行date命令的结果跑那去了呢,赶快去当前 目录的today.txt中看看吧!哇塞!结果原来在这里啊!神奇!9.3 Shell 变量重定向重定向刚才的示例中所用到的 符号就是重定向的符号在使用 重定向的时候需要注意一点,前面的示例中的today.txt文件如果不存 在将会自动创建,如果today.txt存在,重定向会把原today.txt里的 内容全部删除后重新建立一个today.txt文件,如果想把重定向的信 息保存到t
11、oday.txt中又不想删除原先文件中的内容需要使用 追 加重定向 追 加重定向cat today.txt星期三 12月 15 14:33:02 GMT+8 2010date today.txt#cat today.txt 自己看一看结果吧!9.3 Shell 变量标准输入输出:标准输入输出:前面说了重定向,下面来看这么一个示例:mkdir ht/hello/linux/log.txt这时屏幕上会提示 无法创建目录,没有这个文件或目录这里有个问 题,既然已经重定向输出到log.txt里为什么还会出现提示呢?在linux中,每个程序都拥有三种定义的读或写的方法:1、标准输入stdin:读取用户从
12、键盘输入的信息2、标准输出stdout:把信息显示到用户屏幕上3、标准错误stderr:把信息输出到用户屏幕上9.3 Shell 变量标准输入输出标准输入输出:前面的示例只是将标准输出做了重定向,而没有对标 准错误进行重定向,所以才会在屏幕上出现程序错误的信息,如何对 错误输出进行重定向呢?在刚才的前边加上2,试试看:mkdir ht/hello/linux/2 log.txt怎么屏幕上刚才的显示都没有了呢?原来错误信息已经被重定向到 log.txt文件中了。0 std input 1 std output 2 std error除了2以外还可以用&来代替2mkdir ht/hello/lin
13、ux/&log.txt9.3 Shell 变量标准输入输出标准输入输出:前面都提到了标准输出和标准错误的重定向,接着来 看一下标准输入的重定向.tac是一个简单的程序,它从键盘上读取输 入信息,然后再将输入的信息颠倒后输出,下面来对输入重定向.先 vi ht.txt文件,内容为1.ubuntu2.redhat3.slackware4.openBSD执行tac ht.txt 将tac输入重定向为ht.txt文件9.3 Shell 变量管道管道:是shell中最重要的功能之一,管道的作用就是将一个程序的 输出,传输给另一个程序作为另一个程序的输入,这就叫做管道.管道 的运算符是|(基本上和是同一个
14、键)ls-lh-sort=size|tacls-lh sort=size命令的结果是将当前目录里的文件以大到小排列,然后显示出来 后送进了管道|而不是屏幕,管道将先前ls命令得到的结果传给了tac 命令,tac命令将输入的内容颠倒一下,用户在屏幕上看到的结果是当 前目录下的文件,从小到的顺序显示了出来。9.3 Shell 变量管道管道:它的作用远不止这些,管道可以在一条命令里多次使用例如:cat ht.txt|tac|grep m显示ht.txt里的内容输出给了tactac将输入的内容颠倒给grepgrep 将含有m的内容过滤出来思考:cat ht.txt|hi.txt是否可以,为什么?9.3
15、 Shell 变量重定向重定向:shell中有一个teetee命令,teetee命令的作用是读入标准输入的内容,然后将标准输入的内容发送到标准输出和文件.命令格式 tee 选项 文件名命令格式 tee 选项 文件名-a 追加到文件末尾cat ht.txt|tac|tee-a a.txtcat读取ht.txt文件给tac 颠倒输出后给tee,tee会将tac程序的结果 显示在屏幕上,并把显示在屏幕上的内容追加到a.txt文件末尾9.3 Shell 变量 别名别名:平时在使用shell的时候,可能经常会碰到需要使用某个很长 的命令或者某个命令的多个参数很多次.为了节约用户的时间,bash 提供了一
16、种叫别名的机制,让用户可以通过命令来定义快捷键.例如在平时的工作中经常需要用到ls-lh这条命令alias dir=ls-lhalias dir=ls-lh这样就把ls-lh这条命令的快捷键定义为dir如果需要执行ls-lh只 要使用dir,就相当在使用ls-lh命令了。9.3 Shell 变量别名别名:1、如何查看系统上已定义好的别名呢?命令:alias 就能显示系统上定义的别名。2、如何取消一个已经定义好的别名呢?命令:unalias 别名例如:定义别名ll,只显示隐藏目录:$alias ll=ls-d.*/-color=tty需要取消已经定义的ll执行:unalias ll 这样定义的别
17、名就取消了9.3 Shell 变量 命令替换命令替换和重定向有些相似,但区别在于命令替换是将一 个命令的输出作为另一个程序的参数.命令替换的格式为:命令1 命令2 命令1 命令2 这里命令2的结果将 作为命令1的参数例如aa.txt文件里的内容为/usr/bincd cat aa.txt首先cat aa.txt显示目录/usr/bin作为参数传递给了cd。相当于执行了cd/usr/bin切换到了/usr/bin目录下9.3 Shell 变量 变量变量:shell在开始执行时就已定义了一些和系统有关系的环境变量,这些变量一般都是为大写.HOME 用户保存注册目录的完全路径名PATH 用于路径名T
18、ERM 终端类型UID 当前用户在系统中的识别号PWD 当前工作目录的绝对路径名还有很多很多就不一一列举了。如果想查看某个变量名的值可以用echo$变量9.3 Shell 变量 变量:如何查看系统中的环境变量呢?执行命令:env显示的内容,是系统启动时已定义好的环境变量。set 命令是用来查看shell变量的命令export 命令是用来修改当前环境变量的命令命令格式为export(原)变量名=(新)变量值原)变量名=(新)变量值例如:export LANG=cexport LANGUAGE=c设定语言环境变量为英文9.3 Shell 变量定义变量时需要注意的几点1.系统变量一般都是大写2.用户
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九章_Linux Shell编程 第九 _Linux Shell 编程
限制150内