《Linux实用教程第6》由会员分享,可在线阅读,更多相关《Linux实用教程第6(31页珍藏版)》请在金锄头文库上搜索。
1、第6章 Shell编程Linux实用教程第三版PPT6.1熟悉Shell程序的创建6.1.1语法基本介绍6.1.2Shell程序的创建过程语法基本介绍 1开头2注释3执行命令Shell程序的创建过程 1创建文件2设置可执行权限3执行Shell程序4使用bash命令执行程序6.2Shell变量6.2.1Shell定义的环境变量6.2.2用户定义的变量6.2.3位置参数6.2.4预定义变量6.2.5参数置换的变量Shell定义的环境变量Shell在开始执行时就已经定义了一些与系统的工作环境有关的变量,用户还可以重新定义这些变量。常用的Shell环境变量 Shell环境变量环境变量描述描述HOME用
2、于保存用户主目录的完全路径名PATH用于保存用冒号分隔的目录路径名,Shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行TERM终端的类型UID当前用户的UID,由数字构成PWD当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化PS1 主提示符,在root用户下,默认的主提示符是“#”,在普通用户下,默认的主提示符是“$”PS2在Shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“”然后按回车键,或者当用户按回车键时Shell判断出用户输入的命令没有结束时,就显示这个辅助提示符,提示用户继续输入命令的其余部分,默认的辅助提示符
3、是“”用户定义的变量 用户可以按照下面的语法规则定义自己的变量。变量名=变量值在定义变量时,变量名前不应该加符号“$”,在引用变量的内容时则应在变量名前加符号“$”。在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来。在编写Shell程序时,为了使变量名和命令名相区别,建议所有的变量名都用大写字母来表示。位置参数 位置参数是一种在调用Shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,Shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。$0是一个特殊的变量,它的内容是当前这个Sh
4、ell程序的文件名,所以$0不是一个位置参数,在显示当前所有的位置参数时是不包括$0的。预定义变量 预定义变量和环境变量相类似,也是在Shell一开始时就定义了的变量。所不同的是,用户只能根据Shell的定义来使用这些变量,所有预定义变量都是由符号“$”和另一个符号组成的。常用的Shell预定义变量 预定义变量预定义变量描述描述$# 位置参数的数量$*所有位置参数的内容$?命令执行后返回的状态,0表示没有错误,非0表示有错误$当前进程的进程号$!后台运行的最后一个进程号$0当前执行的进程名参数置换的变量 Shell提供了参数置换功能以便用户可以根据不同的条件来给变量赋不同的值。参数置换的变量有
5、四种,这些变量通常与某一个位置参数相联系,根据指定的位置参数是否已经设置决定变量的取值。1变量=$参数-word2变量=$参数=word3变量=$参数?word4变量=$参数+word6.3变量表达式6.3.1字符串比较6.3.2数字比较6.3.3逻辑测试6.3.4文件操作测试变量表达式test是Shell程序中的一个表达式,通过和Shell提供的if等条件语句相结合可以方便地测试字符串、文件状态和数字。其语法如下所示。test 表达式表达式所代表的操作符有字符串操作符、数字操作符、逻辑操作符以及文件操作符。其中文件操作符是一种Shell特有的操作符,因为Shell里的变量都是字符串,为了达到
6、对文件进行操作的目的,于是才提供了这样的一种操作符。字符串比较 字符窜比较是用来测试字符串是否相同、长度是否为0、字符串是否为null。字符串比较符号 字符串比较符号字符串比较符号描述描述= 比较两个字符串是否相同,相同则为“是”!= 比较两个字符串是否相同,不同则为“是”-n 比较字符串的长度是否大于0,如果大于0则为“是”-z比较字符串的长度是否等于0,如果等于0则为“是”数字比较 数字比较是用来测试数字的大小。数字比较符号 数字比较符号数字比较符号描述描述-eq相等-ge大于等于-le小于等于-ne不等于-gt大于-lt小于逻辑测试 逻辑测试是用来测试文件是否存在。逻辑测试符号 逻辑测试
7、符号逻辑测试符号描述描述!与一个逻辑值相反的逻辑值-a两个逻辑值为“是”返回值才为“是”,反之为“否”-o两个逻辑值有一个为“是”,返回值就为“是”文件操作测试 文件操作测试表达式通常是为了测试文件的文件操作逻辑。文件操作测试符号 文件操作测试文件操作测试符号符号描述描述-d对象存在且为目录则返回值为“是”-f对象存在且为文件则返回值为“是”-L对象存在且为符号链接则返回值为“是”-r对象存在且可读,则返回值为“是”-s 对象存在且长度非0则返回值为“是”-w对象存在且可写,则返回值为“是”-x对象存在且可执行,则返回值为“是”!测试条件的否定6.4Shell条件判断语句6.4.1 if条件语
8、句6.4.2 case条件语句if条件语句Shell程序中的条件分支是通过if条件语句来实现的,其语法格式有if-then-fi语句和if-then-else-fi语句两种。if-then-fi语句语句语法格式:if 命令行1then命令行2fiif-then-else-fi语句语句 语法格式:if命令行1then命令行2else命令行3ficase条件语句条件语句 if条件语句用于在两个选项中选定一项,而case条件选择为用户提供了根据字符串或变量的值从多个选项中选择一项的方法。语法格式:case string inexp-1) 若干个命令行1;exp-2) 若干个命令行2;.*) 其它命令
9、行esac6.5Shell循环控制语句6.5.1 for循环语句6.5.2 while循环语句6.5.3 until循环语句for循环语句 for循环语句对一个变量的可能的值都执行一个命令序列。赋给变量的几个数值既可以在程序中以数值列表的形式提供,也可以在程序以外以位置参数的形式提供。for循环语句的语法格式如下所示。for 变量名 in数值列表do 若干个命令行donewhile循环语句 While语句是用命令的返回状态值来控制循环的。语法格式:while 若干个命令行1do 若干个命令行2doneuntil循环语句 until循环语句是另外一种循环结构,它和while语句相类似。语句格式:until 若干个命令行1do 若干个命令行2done