shell编程2.ppt_第1页
shell编程2.ppt_第2页
shell编程2.ppt_第3页
shell编程2.ppt_第4页
shell编程2.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、Shell 编程基础(补充),如何建立和执行Shell 脚本 理解Shell 变量特性 掌握Shell 变量赋值方式 介绍shell 编程中常用的命令和控制命令,6.4.1 Shell 脚本,Shell 程序是包含一个或多个Shell 命令的集合。 Shell 程序通常放在文件中,称为Shell 脚本。 建立Shell 脚本文件同建立普通文件的方式一样,可以用vi 来建立。 Shell 程序由Shell 解释执行,方式简单。 优点: 确定步骤一次完成目标 不用重复键入一系列命令 简化自己和其他用户的操作,6.4.1 Shell 脚本(续),三种 Shell 文件执行方式: (1) chmod命

2、令(把文件的权限改成可读、可执行) $ chmod +x 脚本文件名 (或chmod 755 脚本文件名) $ 脚本文件名及其参数 (2) 直接使用Shell命令来执行 $ sh 脚本文件名及其参数 (3) 使用bash内部命令“source”或“.” $ source 脚本文件名及其参数 $ . 脚本文件名及其参数,6.4.1 Shell 脚本(例),$ cat hello #Filename:hello (#后的字符串为注解) echoHelloworld! 第一种:将hello这个文件的权限设定为可执行。 $ chmod 755 hello 或 chmod u+x hello $./he

3、llo helloworld!,6.4.1 Shell 脚本(例),第二种:直接使用sh命令来执行。 $ shhello 或 $ bashhello helloworld! helloworld! 第三种:使用bash内部命令“source”或“.” $sourcehello 或 $. hello helloworld helloworld,6.4.2 Shell 变量,用户自定义变量 位置变量 环境变量 预定义的特殊变量,用户自定义变量,在Shell脚本程序内部定义的Shell变量(临时变量),随着脚本程序的执行完毕而自动消失。 临时变量包括用户定义的变量和位置参数。 Shell变量没有数据

4、类型限制,也不需要在赋值前定义。,用户自定义变量(续),用户自定义变量: 变量命名 以字母或下划线开头,包括字母、数字、和下划线。 变量赋值变量名=变量值 (等号前后不可有空格)例:a=“beijing”(可以使用read 命令来从标准输入读取数据,并赋值给变量,还可由命令替换的输出来赋值。) 变量引用在变量名之前加 $ ,表示变量的值.例: echo $a (显示变量a的值),位置变量,出现在命令行上的位置确定的参数称为位置参数。 $ 命令 参数1 参数2 参数3 当Shell解释一个命令时,它将变量与命令行中的每一项关联,关联的变量称为位置变量,它们是: 0,1,2,9。这10个位置变量对

5、应命令行上各项的位置,命令名(或Shell脚本名)是0,命令的第一个参数是1,依次类推。 当命令行上的参数多于9个时,需要用shift命令移动位置变量,每执行一次shift命令,变量0不变,从1开始位置变量左移一位,即把2,3,4 9 的值分别赋值给1,2,3 9。,预定义的特殊变量,这类变量具有特殊的含义,它们的值由Shell 根据实际情况来设置, 用户不能重新设置。 $#实际位置参数个数(不包括Shell脚本名), 通常在 程序中用来检查执行时带入的参数个数是否正确 $* 命令行中的所有位置参数的字符串 $ 与$* 相似,但值不同. 例如:对于位置参数F1 F2 F3 “$*”表示“F1

6、F2 F3”而“$”表示“F1” “F2” “F3” $? 表示最后一条命令执行后的退出状态(返回值), 为十进制数。一般命令的执行成功返回值为0。,例1,$ cat sh_prg echo $# echo $* echo $1 $2 $3 shift 2 echo $# echo $* echo $1 $2 $3,$ sh_prg A B C D 4 A B C D A B C 2 C D C D (这时的$3为空值),例子,$ cat safrm1 #copy file to directory /tmp and then #remove it form the current direc

7、tory #first copy 1 to /tmp cp $1 /tmp #now remove the file rm $1 $ safrm1 abc def 程序中只用了$1,因此只有abc一个 文件被删除。,$ cat safrm2 cp $* /tmp #now remove the file rm $* $ safrm2 abc def xx guio 程序中用了$*,表示命令行 中的所有位置参数,因此四 个文件都被删除。,read 命令,功能:从标准输入读取数据 格式:read 变量1 变量2 说明:多个数据或变量时用空格分隔 若变量个数与数据个数相等,则对应赋值。 若变量个数大

8、于输入数据个数,则没有输入数据的变量取空值。 若变量个数小于输入数据个数,则多余的数据赋给最后一个变量。,read 命令(例),$ cat getname echo “ Enter your First Middle Last name: ” read f m l echo $m $l $f $ getname Enter your First Middle Last name: Ou yang Guang zhong (多余的数据赋给最后一个变量) yang Guang zhong Ou $ getname Enter your First Middle Last name: “Ou yan

9、g” guang zhong ( 输入的数据中含有空格时要用引号括起来) Guang zhong Ou yang,Shell 编程中的控制命令,控制命令有: if、case 、for 、while、until,test 命令,功能:测试表达式 格式:test 表达式 或 表达式 (后,前要有空格) 表达式的选项和意义如下: 关于字符串的测试:,test 命令(续),关于文件属性的测试:,test 命令(续),关于数值的测试:,test 命令(续),测试命令可以由单个测试条件构成,也可以由多个测试条件构成,用逻辑操作符号连接起来。 test命令是Shell编程中条件判断最常用的测试命令,它一般总

10、是与if、while、until等语句一起使用。,test 命令(例),测试:10 = x = 50 test $x -ge 10 -a $x -le 50 测试:变量user值为zhou或chen test $user = zhou -o $user = chen 测试:变量file可读普通文件 test -r $file -a -f $file 测试:变量file不是一个目录 test ! -d $file,expr 命令,expr是一条表达式评估命令,它从其后的自变量中读入,然后进行评估,评估后将结果写到标准输出。通常与命令替换以及变量的赋值一起使用。 评估主要是作一些运算,例如加减乘除

11、等算术运算,逻辑运算,字串匹配等。 算术运算符:+,-,* , / (Shell只提供整数运算) 逻辑运算符:=,=,=,!= 等等运算符左右都必须有空格,例如:j=expr $j + 1 表示Shell变量j完成了加1的动作。,expr 命令(例),$ a=5; b=16 $ x=expr $b / $a $ y=expr $b % $a $ echo x=$x y=$y x=3 y=1 $ a=expr $a + 1 $ echo $a 6,if 语句,语句格式: if 命令表1 (条件测试) then 命令表2 else 命令表3 fi 执行过程: 首先进行条件测试或判断命令表1执行成功

12、否,结果为真,则执行 then 后的命令,然后执行fi后面的命令;否则执行 else 后的命令。 命令表1执行成功,即最后一条命令的返回值为0,则表示测试结果为真,反之为假。,if 语句 (例2),例:判断某一用户是否已登录,用户名由命令行参数带入程序。 $ cat on if test “$#” -ne 1 then echo “you must give a username” fi user=$1 if who |grep “$user ” /dev/null then echo “$user is login on” else echo “$user is not here. Try

13、again later.” fi,if 语句 (例3),例:编写一问候程序,根据系统时间显示不同的问候句。 0-12时, 显示: good morning 12-18时, 显示: good afternoon! 其它时间, 显示: good evening! $ cat greeting hour=date +%H #取2位小时数 if test $hour -le 11 then echo good morning!“ else if $hour -le 17 then echo good afternoon! else echo good evening! fi fi,if 语句 (例4)

14、,$ cat yesno a=$1 if test $a = “YES” -o $a = “yes” then echo “Yes !” else if test $a = “NO” -o $a = “no” then echo “NO !” else echo “error argument !” fi if,case 语句,语句格式: case 字符串 in 模式1) 命令表1; 模式2) 命令表1; esac 执行过程: 用字符串依次与各模式进行比较,发现匹配的模式就执行其后的命令,直至“;”为止,然后执行esac后面的命令。 模式中可使用 ?, ,*(意义同通配符) 模式中可以使用“|

15、”,表示各模式之间是或的关系。如,P|p意味着大写和小写的p都匹配。,case 语句(例1),case $1 in dir|path) echo current path is pwd ; date|time) echo today is date ; *) echo invalid first augument ; esac 该程序执行时应带入一个字符串参数,应是dir、path、date、time等字符串,如果是别的字符串,则认为是“invalid first augument”,case 语句(例2),$ cat usernu n=$1case $n in0-9) echo only $

16、n users in system;1-20-9) echo $n users in system;3-90-9) echo larger number users in system;*) echo too larger of number users in system;esac 该程序执行时应带入一个正整数,(例如:usernu 21),case 语句(例3),$ cat greet2 a=$1 case $a in 0-9|10-2) echo good morning ; 13-8) echo good afternoon ; 19|20-3) echo good evening ;

17、 *) echo a error argument esac 该程序执行时应带入一个023的正整数,(例如:greet2 21) 否则认为是 a error argument “,case 语句(例4),$ cat yes_no1 a=$1 case $a in Yes|Y|YES|y|yes) echo Yes! ; N|n|NO|no|No) echo No! ; *) echo error agument! esac,for 语句,语句格式:for 变量 in 值表或文件集do命令表done 执行过程: 依次取值表中的字串赋给变量,然后执行命令表,直到取完所有的字串,结束循环,执行don

18、e后的命令。,for 语句(例1),拷贝所有后缀为 txt 的文件到目录textfile. for file in *.txt do cp $file textfile done,for 语句(例2),例:计算1-6的平方值 for i in 1 2 3 4 5 6 do s=expr $i * $i echo $i $s done,while 语句,语句格式: while 命令表1 do 命令表2 done 执行过程: 首先执行命令表1,若命令返回码为0,则为真,进入循环体,执行命令表2一次,然后返回执行命令表1,直到命令表1的返回码为非0,循环结束。执行done后的语句。,while 语句

19、(例),例:计算并显示1-n的平方表 i=1 n=$1 while test $i -le $n do s=expr $i * $i echo $i $s i=expr $i + 1 done,if 与while,#this programs function is comput n!,n is the first argument n=$1 if test $n -gt 10 then echo $1 must less 11 exit 1 fi i=1 s=1 while test $i -le $n do j=$i s=expr $i * $s i=expr $i + 1 done echo $j!= $s,until 语句,语句格式: until 命令表1 do 命令表2 done 执行过程: 首先执行命令表1,若命令返回码为非

温馨提示

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

评论

0/150

提交评论