1、检查磁盘剩余空间(df) 2、echo
格式: echo [-n] word/string
此命令把每个单词或字符串写入shell的标准输出.
四、变量和参数
在shell程序中,共有6种类型的变量 1、变量的定义
定义变量的格式:变量名=表达式
用$可以取得变量的值,如:$num为num的值。 2、位置变量
位置变量是在调用shell程序的命令行中按照确定的位置决定的变量。位置变量用来存储Shell程序后面所跟的参数。第一个参数存储在变量1中,第二个参数存储在变量2中,依次类推。在程序名之后输入的每个参数之间用空格分隔。$0是当前该命令文件的名字。
例如,编写一个Shell程序reverse,执行时带两个参数。输出时,将两个参数的位置颠倒。reverse的内容为:
#program reverse, prints the command line parameters out in reverse order echo \
在Shell下执行此Shell程序:reverse hello there 其输出为:there hello
3、shell预定义变量
有些变量在执行Shell程序时系统就设置好了,并且不能加以修改: $# 存储运行Shell程序时输入的位置参数的个数。 $? 存储上一个执行命令的返回值。
$* 存储从第一个位置参数开始的所有位置参数的内容。
$@ 存储所有命令行输入的参数,分别表示为“$ 1”,“$ 2” . . . 。 $$ 存储当前执行进程的进程标识PID。
$! 存储上一个后台执行命令的进程标识PID。
五、运算符和表达式 Shell中的运算符包括
运算符 文件运算符 -e filename -d filename -f filename -L filename -r filename -w filename
如果 filename存在,则为真 如果 filename为目录,则为真 如果 filename为常规文件,则为真
如果 filename为符号链接,则为真
如果 filename可读,则为真 如果 filename可写,则为真
[ -r /var/log/syslog ] [ -w /var/mytmp.txt ] [ -L /usr/bin/grep ] [ -e /var/log/syslog ] [ -d /tmp/mydir ] [ -f /usr/bin/grep ]
描述
示例
11
-x filename filename1-nt filename2 filename1-ot filename2
如果 filename可执行,则为真 如果 filename1比 filename2新,则为真
如果 filename1比 filename2旧,则为真
[ -L /usr/bin/grep ] [ /tmp/install/etc/services -nt /etc/services ] [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法) -z string -n string string1== string2 string1!= string2 算术比较运算符 num1-eq num2 num1-ne num2
num1-lt num2 小于 num1-le num2 小于或等于 num1-gt num2 num1-ge num2 算术运算符: + - * / %
大于或等于
[ 3 -ge $mynum ] [ - 3 ] [ 3 + 5 ] [ 8 – 3 ] [ 2 \\* 3 ] [ 6 \\/ 2 ] [ 5 % 2 ]
大于
[ 3 -lt $mynum ] [ 3 -le $mynum ] [ 3 -gt $mynum ]
不等于
[ 3 -ne $mynum ]
等于
[ 3 -eq $mynum ]
如果 string长度为零,则为真 如果 string长度非零,则为真 如果 string1与 string2相同,则为真
如果 string1与 string2不同,则为真
[ -z \yvar\[ -n \yvar\
[ \three\
[ \ \three\
(在*和/之前必须冠以反斜线“\\”)
加号 减号 乘号 除号 取余
- 负号
在脚本程序中可以用运算符将运算对象连接起来构成的式子称为表达式。
六、shell控制语句 1、if语句
格式1:if [ 条件表达式 ] then 命令序列 fi
格式2:if [ 条件表达式 ]
12
then 命令序列 else 命令序列 fi
格式3:if [ 条件表达式 ] then 命令序列
elif [ 条件表达式 ] then 命令序列 else 命令序列 fi
格式4:if test 条件表达式 then 命令序列
{elif test 条件表达式 then 命令序列 .
. .
}
else 命令序列 fi 说明:
(1)格式1、格式2、格式3中的“[”和“]”两侧要留有空格
(2)格式4中的“{}”不属于if语句中的符号,只在本格式中说明“{}”中的内容可以重复出现多次。 2、for循环语句
格式1:
for 变量 in 值表 do
命令表 done
格式2:
for 变量 in 文件正则表达式 do
命令表
done
其执行过程是,变量的值依次取当前目录下(或给定目录下)与正则表达式相匹配的文件名,每取值一次,就进入循环体执行命令表,直至所有匹配的文件名取完为止,退出for循环。
格式3:
for i in $* 或者 for i do do
命令表 命令表
done done
这两种形式是等价的。其执行过程是,变量i 依次取位置参数的值,然后执行循环体
13
中的命令表,直至所有位置参数取完为止。
3、while循环语句 格式:
while条件表达式 do
命令表 done
其执行过程是,先进行条件测试,如果结果为真,则进入循环体(do—done之间部分), 执行其中命令;然后再做条件测试……直至测试条件为假时才终止while语句的执行。 4、until语句 格式:
until 条件表达式 do
命令表 done
它与while语句很相似,只是测试条件不同:当测试条件为假时,才进入循环体,直至测试条件为真时终止循环。 5、break语句和continue语句
break语句可以使我们从循环体中退出来。 格式: break [ n ]
其中,n表示要跳出几层循环。默认值是1,表示只跳出一层循环。
continue语句跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。 格式: continue [ n ]
其中,n表示从包含continue语句的最内层循环体向外跳到第几层循环。默认值为1。循环层数是由内向外编号。 6、case语句
case语句允许进行多重条件选择。 格式:
case 字符串 in
模式字符串1) 命令序列1 … ; ;
模式字符串2) 命令序列2 … ; ; …
模式字符串n) 命令序列n … ; ;
14
esac
其执行过程是用―字符串‖的值依次与各模式字符串进行比较,如果发现同某一个匹配,那么就执行该模式字符串之后的各个命令,直至遇到两个分号为止。如果没有任何模式字符串与该字符串的值相符合,则不执行任何命令。 在使用case语句时应注意:
(1)每个模式字符串后面可有一条或多条命令,其最后一条命令必须以两个分号(即;;)结束。
(2)模式字符串中可以使用通配符。
(3) 如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表示各模式是―或‖的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表。
(4)各模式字符串应是惟一的,不应重复出现。并且要合理安排它们的出现顺序。例如,不应将―*‖作为头一个模式字符串,因为―*‖可以与任何字符串匹配,它若第一个出现,就不会再检查其它模式了。
(5)case语句以关键字case开头,以关键字esac(是case倒过来写!)结束。 (6)case的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行任何命令,则退出值为零。 7、expr语句
虽然shell并不精于数值计算,但还是提供了有关的计算语句。
格式:
expr 表达式1 表达式2 ??
表达式中只允许整数,合法的运算符有+、-、*、/和%(取余),在*(乘号)和/(除号)之前必须冠以\\(反斜杠),以防这些运算符由expr获得之前被shell解释。
例如:$expr 3 \\* 5 + 2 \\/ 2 16
注意:运算符两侧要留有空格。 8、read语句
利用read语句命令可以从键盘上读取数据,然后赋给指定的变量
格式:
read 变量1 变量2 ?? 例如:read x y z
输入数据时,数据间以空格或制表符作为分隔符。如果变量个数与给定数据个数相同,则依次对应赋值;如果变量个数少于数据个数,则从左至右对应赋值,但最后一个变量被赋予剩余的所有数据;如果变量个数多于给定数据个数,则依次对应赋值,而没有数据与之对应的变量取空串。
9、举例
例1 从控制台接收用户输入,并在标准输出设备上显示结果 echo ―Are you girl?please answer Y or N‖ read sex
if [ $sex == ―Y‖ ];then echo ―Hello girl!‖ echo ―How are you!‖ else echo ―Hello boy!‖
15