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 ]

 

posted @ 2018-07-19 20:57  山的那一边  阅读(239)  评论(0编辑  收藏  举报