第7章 shell程序设计_第1页
第7章 shell程序设计_第2页
第7章 shell程序设计_第3页
第7章 shell程序设计_第4页
第7章 shell程序设计_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第7 7章章 shellshell程序设计程序设计 o 了解了解shellshell作用作用o 掌握掌握shellshell脚本的建立与执行方法,会编写脚本的建立与执行方法,会编写简单的简单的shellshell脚本程序脚本程序o 了解了解shellshell变量、特殊字符、输入输出命令、变量、特殊字符、输入输出命令、程序逻辑结构语句程序逻辑结构语句7.17.1 shellshell概述概述 o ShellShell的功能:的功能:n 命令解释程序命令解释程序n 编程语言编程语言o ShellShell版本版本解释型语言解释型语言shellshell脚本的建立与执行脚本的建立与执行 o sh

2、ellshell脚本的建立脚本的建立 n 同建立同建立普通文本文件普通文本文件的方式相同,可利用编辑的方式相同,可利用编辑器器vivi或或catcat命令,进行程序录入和编辑加工。命令,进行程序录入和编辑加工。 o shellshell脚本的执行(脚本的执行(3 3种方式)种方式) n sh sh 脚本名脚本名 n sh sh 脚本名脚本名n 改执行权限后直接执行方式改执行权限后直接执行方式 7.2 shell7.2 shell的变量的变量o 所有编程语言都有变量的概念,所有编程语言都有变量的概念,shellshell本质本质上属于一种编程语言,同样有变量的概念上属于一种编程语言,同样有变量的

3、概念o ShellShell变量:变量:n 环境变量环境变量( (只读、可写只读、可写) )n 自定义变量自定义变量可写的可写的shellshell环境变量环境变量 o 可写的可写的shellshell环境变量可以对它们进行赋值,大环境变量可以对它们进行赋值,大部分可写的部分可写的shellshell环境变量都在登录过程中执行环境变量都在登录过程中执行“/etc/profile/etc/profile”(系统环境变量系统环境变量)文件时进)文件时进行初始化。该文件由系统管理员设置,用于为行初始化。该文件由系统管理员设置,用于为系统上的所有用户建立一个公共环境。系统上的所有用户建立一个公共环境。

4、o 用户环境变量设置文件用户环境变量设置文件“/home/stu/.bash_profile/home/stu/.bash_profile”( (用户私有环境用户私有环境变量变量) )o 例:例:HOME MAIL PATH PS1 TERMHOME MAIL PATH PS1 TERM只读环境变量只读环境变量特殊的环境变量特殊的环境变量 o $ $* *所有命令行参数的值所有命令行参数的值o $#$#命令行参数的总数命令行参数的总数o $当前进程的进程当前进程的进程ID(PID)ID(PID)o $?$?最后执行的一条命令的退出状态,返回值最后执行的一条命令的退出状态,返回值为为0 0则成功

5、,非则成功,非0 0则失败则失败o $!$!在后台运行的最后一个进程的进程在后台运行的最后一个进程的进程IDID有的书籍称只读环境变量为内部变量有的书籍称只读环境变量为内部变量只读环境变量只读环境变量位置参数位置参数 o 在命令行传递给在命令行传递给shellshell脚本的参数。脚本的参数。o 共有十个位置参数,依次是共有十个位置参数,依次是n $O$O,$1$1,$2$2,$9$9n 必有必有$0$0;而其他位置参数依据实际需求,可有;而其他位置参数依据实际需求,可有可无。可无。 o 输出位置参数输出位置参数 n 可以用可以用echoecho命令输出位置参数命令输出位置参数 只读环境变量只

6、读环境变量位置参数位置参数o 用用setset命令给位置参数命令给位置参数赋值赋值 o 移动移动位置参数位置参数 n 如果实际给定的命令行参数多于如果实际给定的命令行参数多于9 9个,就需要用个,就需要用shiftshift命令移动位置参数。命令移动位置参数。 n shiftshift命令可以带有一个整数作为参数,例如:命令可以带有一个整数作为参数,例如:n shift 3shift 3n 其功能是每次把位置参数左移其功能是每次把位置参数左移3 3位。如果未带参位。如果未带参数,则默认值为数,则默认值为l l。 用户自定义变量用户自定义变量 o 在在shellshell编程语言中编程语言中无须

7、声明和初始化无须声明和初始化shellshell变量,一个未初始化的变量,一个未初始化的shellshell变量,其默认变量,其默认的初始化值为的初始化值为空字符串空字符串。 o 用户定义的用户定义的shellshell变量名是由字母或下线符变量名是由字母或下线符打头的字母、数字和下线符序列,并且大小打头的字母、数字和下线符序列,并且大小写字母意义不同。这与写字母意义不同。这与C C语言语言中标识符的定中标识符的定义相同。义相同。 用户自定义变量用户自定义变量 o 字符串赋值,格式如下:字符串赋值,格式如下:n 变量名变量名= =字符串字符串o “= =”两边不能有空格两边不能有空格o 如果在

8、赋给变量的值中要如果在赋给变量的值中要含有空格、制表符含有空格、制表符或换行符或换行符,那么就应该用,那么就应该用双引号双引号把这个字符把这个字符串括起来。串括起来。o 变量值可以作为某个长字符串中的变量值可以作为某个长字符串中的一部分一部分查看变量、使用变量查看变量、使用变量o 用用envenv命令查看命令查看用户用户shellshell变量变量o 用用不带参数的不带参数的setset命令命令可以显示所有可以显示所有“shellshell变量(变量(当前用户当前用户shellshell变量、用户自定义变变量、用户自定义变量量)名以及它们的当前值。)名以及它们的当前值。o exportexpo

9、rt命令把命令把shellshell变量导入给用户作为环变量导入给用户作为环境变量境变量o 在程序中使用变量值时,要在变量名前面加在程序中使用变量值时,要在变量名前面加上一个符号上一个符号“$”$”。这个符号告诉。这个符号告诉shellshell,要,要取出其后变量的值。取出其后变量的值。 相关命令相关命令env set export unset readonlyenv set export unset readonlyo 将用户将用户shellshell变量导入成环境变量变量导入成环境变量n $export TMP$export TMPo 清除环境变量:清除环境变量:unsetunsetn

10、$unset TMP$unset TMPo 设置只读变量:设置只读变量:readonlyreadonlyn $readonly TMP$readonly TMPC C语言中可以使用语言中可以使用getenv() setenv() unsetenv() getenv() setenv() unsetenv() 函数访问环境变量函数访问环境变量7.3 shell7.3 shell中的特殊字符中的特殊字符 o 特殊字符有着重要的作用,包括:特殊字符有着重要的作用,包括:n 通配符通配符n 引号引号 n 命令执行顺序操作符命令执行顺序操作符n 注释符、反斜线及后台操作符注释符、反斜线及后台操作符 o

11、在使用时应注意它们表示的意义和作用范围在使用时应注意它们表示的意义和作用范围shellshell的通配符的通配符o 星号(星号(* *)- -匹配任意字符匹配任意字符 o 问号(问号(? ?)- -匹配任意一个字符匹配任意一个字符o 一对方括号(一对方括号( ) - -匹配限定的字符匹配限定的字符o 感叹号(感叹号(! !) - -匹配取反匹配取反shellshell的引号的引号 o 双引号(双引号(“”“”) - -除除$ / $ / 字符外作为文本字符外作为文本o 单引号(单引号() - -所有字符作为文本所有字符作为文本o 倒引号(倒引号() - -解释为命令行解释为命令行o 倒引号的嵌

12、套应用,倒引号的嵌套时必须倒引号的嵌套应用,倒引号的嵌套时必须在内层的一组倒引号用反斜线(在内层的一组倒引号用反斜线( )进行)进行转转义义。 命令执行顺序操作符命令执行顺序操作符 o 顺序执行顺序执行 n 顺序分隔符顺序分隔符(; ;) n 管道线管道线(| |) o 逻辑与逻辑与(&) o 逻辑或逻辑或(|) shellshell中的注释符、反斜线及后台操作符中的注释符、反斜线及后台操作符 o 注释符注释符(# #) o 反斜线(反斜线( ) n 转义符转义符,它能把特殊字符变成普通字符。,它能把特殊字符变成普通字符。 n 还作为还作为续行符续行符使用。如果把它放在一行的回车使用。

13、如果把它放在一行的回车换行之前那么表示下一行接续此行,与下一行换行之前那么表示下一行接续此行,与下一行被视为同一行,可用于表示长的输入行。被视为同一行,可用于表示长的输入行。o 后台操作符(后台操作符(& &) 与与C语言相同语言相同7.4 shell7.4 shell编程中的输入输出命令编程中的输入输出命令 o shellshell中输入输出的标准文件中输入输出的标准文件 o 每个进程运行时自动打开三个文件每个进程运行时自动打开三个文件( (设备文设备文件件) ),这些文件称为命令的标准文件,分别,这些文件称为命令的标准文件,分别用于命令用于命令读取输入读取输入、输出结果输出

14、结果以及以及输出错误输出错误消息,即消息,即n 标准输入文件(标准输入文件(stdinstdin) n 标准输出文件(标准输出文件(stdoutstdout) n 标准错误输出文件(标准错误输出文件(stderrstderr)shellshell的输入输出重定向命令的输入输出重定向命令 o 重定向符号重定向符号n 2 2 commandMonitorOutput-fileInput-filekeyboardstdinstoutstderrshellshell的输入输出命令的输入输出命令 o readread命令命令 n 用用readread命令由标准输入读取数据,然后赋给指命令由标准输入读取数

15、据,然后赋给指定的变量。其一般格式如下。定的变量。其一般格式如下。n read read 变量变量1 1 变量变量2 2 o echoecho 命令命令 n echoecho命令是将其后的参数输出到标准输出。最命令是将其后的参数输出到标准输出。最好用双引号把所有参数括起来,这样不仅易读好用双引号把所有参数括起来,这样不仅易读并且能使并且能使shellshell对它们进行正确的解释。对它们进行正确的解释。n 要让要让echoecho命令识别转义符需加入命令识别转义符需加入 -e -e 选项选项shellshell的输入输出实例的输入输出实例 o echo -e echo -e“Enter inp

16、utEnter input:cc”o read line read lineo echo -e“You entered echo -e“You entered:$line”$line”o echo -e“Enter another line echo -e“Enter another line:c”c”o read w1 w2 w3 read w1 w2 w3 o echo -e“The 1th word is echo -e“The 1th word is:$w1n$w1n”o echo -e“The 2th word is echo -e“The 2th word is:$w2$w2”o

17、echo -e“The 3th word is echo -e“The 3th word is:$w2$w2”o exit 0 exit 07.5 shell7.5 shell程序控制结构语句程序控制结构语句 o 脚本的控制结构语句有三种基本的类型:脚本的控制结构语句有三种基本的类型:两两路分支路分支、多路分支多路分支以及一个或多个命令的以及一个或多个命令的循循环执行环执行。o LinuxLinux的的bashbash中的两路分支语句是中的两路分支语句是ifif语句,语句,多路分支语句是多路分支语句是if-elifif-elif和和casecase语句语句;代码;代码的循环执行语句是的循环执行

18、语句是forfor、whilewhile和和untiluntil语句语句以及以及continuecontinue、breakbreak语句。语句。 ifif语句语句 o 两路分支两路分支的的ifif语句语句 格式:格式:n if if 判断条件判断条件n then then 命令命令1 1n else else 命令命令2 2n fifio 判断条件包括判断条件包括命令语句和测试语句命令语句和测试语句两种方式:两种方式: o 命令语句形式的判断条件命令语句形式的判断条件if(条件)else多路条件判断分支多路条件判断分支的的ifif语句语句 o 格式为:格式为:n if if 判断条件判断条件

19、1 1n then then 命令命令1 1n elif elif 判断条件判断条件2 2n then then 命令命令2 2n n else else 命令命令n nn fifio 其中其中elifelif是是else ifelse if的缩写的缩写 if(条件1)else if(条件2)else测试语句测试语句 o 有两种格式,一种是使用有两种格式,一种是使用关键字关键字testtest,而另,而另一种是使用一种是使用方括号方括号。格式如下:。格式如下:n test expressiontest expressionn expression expression o 二者是等效的二者是等

20、效的o 同时要注意几点:同时要注意几点:o 用于三种形式的测试:用于三种形式的测试:文件测试文件测试、字符串测字符串测试和试和数值测试数值测试 文件测试文件测试参数参数功能功能-r -r file file 若文件若文件存在存在并且是用户并且是用户可读可读的,则测试条件为真的,则测试条件为真-w -w filefile若文件若文件存在存在并且是用户并且是用户可写可写的,则测试条件为真的,则测试条件为真-x-x file file若文件若文件存在存在并且是用户并且是用户可执行可执行的,则测试条件为真的,则测试条件为真 -f-f file file若文件若文件存在存在并且是并且是普通普通文件,则测

21、试条件为真文件,则测试条件为真-d-d file file若文件若文件存在存在并且是并且是目录目录文件,则测试条件为真文件,则测试条件为真-p-p file file若文件若文件存在存在并且是并且是FIFOFIFO文件,则测试条件为真文件,则测试条件为真 -s-s file file若文件若文件存在存在并且并且不是空不是空文件,则测试条件为真文件,则测试条件为真字符串测试字符串测试 参数参数功能功能strstr如果字符串如果字符串strstr不是空字符串不是空字符串,则测试条件为真,则测试条件为真 str1 = str1 = str2str2如果如果strlstrl等于等于str 2str 2

22、,则测试条件为真,则测试条件为真( (注意,注意,“=”=”前后须有空格前后须有空格) )str1 ! = str1 ! = str2str2如果如果str1str1不等于不等于str2str2,则测试条件为真,则测试条件为真-n -n strstr如果字符串如果字符串strstr的的长度不为长度不为0 0,则测试条件为真,则测试条件为真-z -z strstr如果字符串如果字符串strstr的的长度为长度为O O,则测试条件为真,则测试条件为真C语言中字符串操作使用函数进行语言中字符串操作使用函数进行数值测试数值测试 参数参数功能功能n1 n1 eq eq n2n2如果整数如果整数n1n1等

23、于等于n2n2(n1 = n2n1 = n2),则测试条件为真),则测试条件为真n1 n1 ne ne n2n2如果整数如果整数nlnl不等于不等于n2n2(n1 n2n1 n2),则测试条件),则测试条件为真为真n1 n1 lt lt n2n2如果如果n1n1小于小于n2n2(n1 n2n1 n2),则测试条件为真),则测试条件为真n1 n1 le le n2n2如果如果n1n1小于等于小于等于n2n2(n1 = n2n1 n2n1 n2),则测试条件为真),则测试条件为真n1 n1 ge ge n2n2如果如果nlnl大于等于大于等于n2n2(n1 = n2n1 = n2),则测试条件为)

24、,则测试条件为真真=!=用逻辑操作符进行组合的测试语句用逻辑操作符进行组合的测试语句 参数参数功能功能! !逻辑逻辑非非,放在任意逻辑表达式之前,原来真的,放在任意逻辑表达式之前,原来真的表达式变为假,原来假的变为真表达式变为假,原来假的变为真-a-a逻辑逻辑与与,放在两个逻辑表达式之间,仅当两个,放在两个逻辑表达式之间,仅当两个逻辑表达式都为真时,结果才为真逻辑表达式都为真时,结果才为真-o-o逻辑逻辑或或,放在两个逻辑表达式之间,其中只要,放在两个逻辑表达式之间,其中只要有一个逻辑表达式为真时,结果就为真有一个逻辑表达式为真时,结果就为真( )( )圆括号,用于将表达式分组,优先得到结果。

25、圆括号,用于将表达式分组,优先得到结果。括号前后应有空格并用转义符括号前后应有空格并用转义符“(”(”和和“)”)”!&|()用逻辑操作符进行组合的测试语句实例用逻辑操作符进行组合的测试语句实例 o ! “$s1” -le 0 ! “$s1” -le 0 -$1 -$1 不小于等于不小于等于0 0o! test $s1 -le 0 ! test $s1 -le 0 o -f $s1 a w $s1 -f $s1 a w $s1 otest f $s1 -a w $s1test f $s1 -a w $s1o $s1 gt 0 o $s2 lt 10 $s1 gt 0 o $s2 lt

26、10 otest $s1 gt 0 o $s2 lt 10test $s1 gt 0 o $s2 lt 10o ( $a gt 0 a $a lt 10 ) a ( $a gt 0 a $a lt 10 ) a $a ne 5 $a ne 5 otest ( $a gt 0 a $a lt 10 ) a test ( $a gt 0 a $a lt 10 ) a $a ne 5$a ne 5casecase语句(多分支)语句(多分支)o 对同一变量进行对同一变量进行多次的测试多次的测试,比,比elifelif语句更简单、语句更简单、简洁简洁ncase string1 incase string

27、1 innstr1)str1)n commands-list1; commands-list1;nstr2) str2) n commands-list2; commands-list2;n.nstrn)strn)n commands-listn; commands-listn;nesacesacswitch(条件)case :case :case :default:使用使用casecase语句时应注意以下几点语句时应注意以下几点 o (1) (1) 每个每个正则表达式正则表达式后面可有一条或多条命令,后面可有一条或多条命令,其最后一条命令必须以其最后一条命令必须以两个分号(两个分号(;)结束

28、。结束。o (2) (2) 正则表达式中可以使用正则表达式中可以使用通配符通配符。o (3) (3) 如果一个正则表达式是由多个模式组成,如果一个正则表达式是由多个模式组成,那么各模式之间应以竖线那么各模式之间应以竖线“|”|”隔开。表示各模隔开。表示各模式是式是“或或”关系,即只要给定字符串与其中一关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表。个模式相配,就会执行其后的命令表。 正则表达式是一种处理字符串的方法,是以行为单位来进行字符串的处理正则表达式是一种处理字符串的方法,是以行为单位来进行字符串的处理行为,通过一些特殊符号的辅助,让使用者达到行为,通过一些特殊符号的辅助

29、,让使用者达到搜寻搜寻/ /删除删除/ /取代取代某特某特定字串的处理过程定字串的处理过程使用使用casecase语句时应注意以下几点语句时应注意以下几点o (4) (4) 各正则表达式是各正则表达式是唯一唯一的,不应重复出现。的,不应重复出现。o (5) case(5) case语句以关键字语句以关键字casecase开头,以关键字开头,以关键字esacesac结束。结束。o (6) case(6) case的退出(返回)值是整个结构中最的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行任后执行的那个命令的退出值。若没有执行任何命令,则退出值为零。何命令,则退出值为零。for

30、for语句语句 o 格式:格式:n for variable in argument-listfor variable in argument-listn dodon command-list command-listn donedoneo 其中的其中的in argument-listin argument-list部分为可选项,部分为可选项,由于它的不同又可有三种形式。由于它的不同又可有三种形式。 for( , , )in argument-listin argument-list部分三种形式部分三种形式 o argument-listargument-list为为变量值表变量值表 n变量变

31、量variablevariable依次取值表中各字符串依次取值表中各字符串 o argument-listargument-list为为文件的表达式文件的表达式 n变量的值依次取当前目录(或指定目录)下与文件表达变量的值依次取当前目录(或指定目录)下与文件表达式相式相匹配的文件名匹配的文件名,每取值一次,就进入循环体执行命,每取值一次,就进入循环体执行命令表,直到所有匹配的文件名取完为止。令表,直到所有匹配的文件名取完为止。 o argument-listargument-list为为空空nargument-listargument-list也可以用也可以用$ $* *来代替,变量依次取来代替

32、,变量依次取位置参位置参数的值数的值,然后执行循环体中的命令表,直至所有位置参,然后执行循环体中的命令表,直至所有位置参数取完为止。数取完为止。 whilewhile语句语句 o 格式为:格式为:n while expressionwhile expressionn dodon command-list command-listn donedoneo 作用:只要作用:只要expressionexpression的值为真,则进入循的值为真,则进入循环体,执行环体,执行command-1istcommand-1ist中的命令,然后再中的命令,然后再做条件测试,直到测试条件为假时才终止做条件测试,直到测试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论