shell编程(三)
四 条件测试
test 测试条件 测试内容
[ 测试条件 测试内容 ]
1 测试文件类型
test -e 文件名 测试文件是否存在,存在为真
[ -e 文件名 ] 注意:[]中必须有空格
test -f 文件名 判断是否是普通文件
test -d 文件名 判断是否为目录
test -b 文件名 判断是否为块设备文件
test -c 文件名 字符设备文件
2 测试文件权限
test -r 文件名 判断是否有可读权限
test -w 文件名 可写
test -x 文件名 执行
test -s 文件名 判断是否为非空白,有内容为真
3 两个文档比较
[ file1 -nt file2 ] file1是否比file2新
[ file1 -ot file2 ] file1是否比file2旧
[ file1 -ef file2 ] file1与file2是否是链接文件
4 两个数值之间判断
[ n1 -eq n2 ] n1和n2是否相等
[ n1 -ne n2 ] n1和n2是否不等
[ n1 -gt n2 ] n1大于n2
[ n1 -lt n2 ] n1小于n2
[ n1 -ge n2 ] n1大于等于n2
[ n1 -le n2 ] n1小于等于n2
5 判断字符串
[ -z 字符串 ] 判断字符串是否为空
[ 字符串1 == 字符串2 ] 判断字串1 是否与字串2相等
[ $aa == $bb ] && echo 1 || echo 2
[ 字符串1 != 字符串2 ] 判断字串是否不等
6 多重判断
-a 逻辑与
[ -z $file -a -e $file ]
-o 逻辑或
! 逻辑非
例子7:判断输入的文件类型和文件权限
#!/bin/bash
echo -e "nide wenjian shifou cunzai? wenjian quanxian shi shenme? \n\n"
read -p "please input filename:" -t 30 filename
test -z $filename && echo "please input filename!!" && exit 1
#-z 变量 判断字符串是否为空,为空为真
test ! -e $filename && echo "wenjian bucunzai!" && exit 2
#-e 变量 判断文件是否存在,存在为真 ! 逻辑非
test -f $filename && filetype=putong
#-f 是否为普通文件
test -d $filename && filetype=mulu
#-d 是否为目录
test -r $filename && perm="read"
#-r 是否有可读权限
test -w $filename && perm="$perm write"
#-w 是否可写
test -x $filename && perm="$perm executable"
#-x 是否可执行
echo -e "the filename is : $filename \n"
#打印文件名
echo -e "filetype is : $filetype \n"
#打印文件类型
echo -e "permision is : $perm \n"
#打印文件权限
五 流程控制
1 if语句
1)if条件语句 -- 单分支。当“条件成立”时执行相应的操作
格式:
if 条件测试命令
then 命令序列
fi
例子8:
如果/boot分区的空间使用超过80%,则输出警告
#!/bin/bash
RATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 `
if [ $RATE -gt 80 ]
then
echo "Warning,/boot DISK is full!"
fi
2)if条件语句 -- 双分支。当“条件成立”、“条件不成立”时执行不同操作
格式:
if 条件测试命令
then 命令序列1
else 命令序列2
fi
例子9:
判断httpd服务是否启动,如果没有启动则启动
#!/bin/bash
http=`netstat -tlun | awk '{print $4 "\n"}' | grep ":80$"`
(或http=$( ps aux | grep httpd | grep -v grep))
if [ -z "$http" ]
then
echo "httpd meiyou qidong!"
/etc/rc.d/init.d/httpd start
else
echo "httpd runing"
fi
3) if条件语句 -- 多分支
格式:
if 条件测试命令1 ; then
命令序列1
elif 条件测试命令2 ; then
命令序列2
elif ...
else
命令序列n
fi
例子10:
#判断输入的字符
#!/bin/bash
echo "if you want to beijing ,please input 1"
echo "if you want to shanghai ,please input 2"
echo "if you want to chengdu ,please input 3"
read -p "please input a num: " -t 30 num
if [ "$num" == "1" ]
then
echo "beijing!!!"
elif [ "$num" == "2" ]
then
echo "shanghai!!!!"
elif [ "$num" == "3" ]
then
echo "chengdu!!!"
else
echo "error,please input 1 or 2 or 3."
fi