linux-bash编程(条件测试和特殊变量)
(1)
整数测试
INT1=63 INT2=77 [ $INT1 -eq $INI2 ] [[ $INT1 -eq $INT2 ]] test $INT1 -eq $INT2
文件测试:
-e FILE:测试文件是否存在
-f FILE: 测试文件是否为普通文件
-d FILE: 测试指定路径是否为目录
-r FILE: 测试当前用户对指定文件是否有读取权限;
-w
-x //测试文件可否执行。
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
[ -e /etc/inittab ]
[ -x /etc/rc.d/rc.sysinit ]
练习:写一个脚本
给定一个文件:
如果是一个普通文件,就显示之;
如果是一个目录,亦显示之;
否则,此为无法识别之文件;
#!/bin/bash # FILE=/etc/rc.d/rc.sysinit if [ ! -e $FILE ]; then //中括号中的!,对测试结果取反。 echo "No such file." exit 6 //退出码为6 fi if [ -f $FILE ]; then echo "Common file." elif [ -d $FILE ]; then echo "Directory." else echo "Unknown." fi
(2)
定义脚本退出状态码
exit: 退出脚本
exit #
如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码($?)即为脚本的退出状态码;
测试脚本是否有语法错误:
bash -n 脚本
bash -x 脚本:单步执行
(3)
bash变量的类型:
本地变量(局部变量)
环境变量: 作用域为当前进程及其子进程。
位置变量: $1, $2, ...
shift //轮换,shift 1 自动切换到下一个参数。
shift 2 自动切换到下下一个参数。以此类推。
例:test.sh 1 2 3 #!/bin/bash # echo $1 //输出a shift echo $1 //输出b shift echo $1 //输出c
特殊变量:
$? //最后一条命令的状态码 $#:参数的个数 $*: 参数列表 $@:参数列表
例 ./filetest.sh /etc/fstab /etc/inittab $1: /etc/fstab $2: /etc/inittab
练习:写一脚本
能接受一个参数(文件路径)
判定:此参数如果是一个存在的文件,就显示“OK.”;否则就显示"No such file."
练习:写一个脚本
给脚本传递两个参数(整数);
显示此两者之和,之乘积;
#!/bin/bash # if [ $# -lt 2 ]; then //要求用户必须输入参数。 echo "Usage: cacl.sh ARG1 ARG2" exit 8 fi echo "The sum is: $[$1+$2]." echo "The prod is: $[$1*$2]."
练习:写一个脚本,完成以下任务
1、使用一个变量保存一个用户名;
2、删除此变量中的用户,且一并删除其家目录;
3、显示“用户删除完成”类的信息;
•组合测试条件
-a: 与关系
-o: 或关系
!: 非关系
if [ $# -gt 1 -a $# -le 3 ] if [ $# -gt 1 ] && [ $# -le 3 ]