Shell脚本之条件语句
我们经常在脚本中使用条件判断,当条件成立时,条件语句会返回特定的值。像test命令和**“[条件表达式]”这种类型是用来判断条件是否成立。当然我们也有if**条件语句。
条件判断
我们经常用**[ 表达式 ]**来判断,如[ 3 -eq 5 ],显然这个表达式是不成立的。再比如[ -d /media/cdrom ],echo $?,返回值为0.说明上述条件判断是成立的。
那么我们常用的条件判断符号有:
- -d:判断是否为目录;-e:判断目录或文件是否存在;-f:判断是否为文件;-r:判断当前用户是否有权限读取;-w判断当前用户是否有权写入;-x:判断当前用户是否有权执行。
- =:判断两边字符串是否相同;!=:判断两边字符串不同,!为取反的意思;-z:为判断字符串是否为空。
- -eq:表示两数字相等;-ge:表示大于等于;-le:表示小于等于;-gt:表示大于;-lt:表示小于。
if语句的结构
if语句与判断条件结合,可以执行指定好的命令操作。如,条件成立则执行命令1;条件不成立则执行命令2 。
if语句有单分支结构,即满足某个条件就执行某个命令。双分支结构即,满足某个条件则执行命令1,否则执行命令2 。多分支结构是要有多个判断要执行。具体格式为:
1.单分支结构:
if [表达式];then
命令1
fi
2.双分支结构:
if [表达式];then
命令1
else
命令2
fi
3.多分支结构:
if [表达式1];then
命令1
elif [表达式2];then
命令2
…
脚本案例
用if双分支来判断主机是否在线。
#!/bin/bash
echo "这是检测主机是否在线的脚本."
contain=$(cat /opt/ipadd.txt)
for test in $contain
do
ping -c2 -i0.2 -W1 $test &> /dev/nell
if [ $? -eq 0 ]
then
echo "$test,主机在线"
else
echo "$test,主机不在线"
fi
done
使用if多分支结构判断数字大小猜数字脚本
n=0
echo "这是一个猜价格的游戏,价格在1~1000的范围内."
jiage=$(expr $RANDOM % 1000)
while true
do
read -p "请输入你猜的价格:" cai
if [ $cai -eq $jiage ]
then
let n++
echo "恭喜你猜对了!它的价格是:$jiage.你一共猜了$n次."
exit 0
elif [ $cai -gt $jiage ]
then
let n++
echo "你猜的价格高了,猜低一点."
elif [ $cai -lt $jiage ]
then
let n++
echo "你猜的价格低了,猜高一点."
fi
done