条件测试
test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1: test 条件表达式 格式2: [ 条件表达式 ]
文件测试
[ 操作符 文件或者目录 ] [ -e 1.txt ]#查看1.txt是否存在,存在返回0 echo $? #查看是上一步命令执行结果 0成功 非0失败 -d 测试是否为目录(Directory) -e 测试目录或文件是否存在(Exist) -f 测试是否为文件(File) -r 测试当前用户是否有权限读取 (Read) -w 测试当前用户是否有权限写入 (Write) -x 测试当前用户是否有权限执行 (eXcute)
整数值比较
[ 整数1 操作符 整数2 ] 常用的测试操作符(重点) 英文命令(只能操作整数) 操作符(可以比较英文命令不能比较的整数) -eq 等于(Equal) == -ne 不等于(Not Equal) != -gt 大于(Greater Than) > -lt 小于 (Lesser Than) < -le 小于或等于(Lesser or Equal) <= -ge 大于或等于(Greater or Equal) >=
逻辑符号
格式1: [ 表达式1 ] 操作符 [ 表达式2 ] 格式2: 命令1 操作符 命令2 -a或&&:逻辑与,”而且“的意思 -o或||:逻辑或,”或者“的意思 !:逻辑否
if语句
单分支
if 条件测试操作 if 已用空间>80% then 命令序列 > then 报警 fi fi
双分支
if 条件测试操作 if 80端口是否在监听 then 命令序列1 then 网站服务已在运行 > else 启动httpd服务 else 命令序列2 fi fi
多分支
if 条件测试操作1 then 命令序列1 elif 条件测试操作1 then 命令序列1 else 命令序列1 fi
case语句
case 分数 in 85~100) 优秀 ;; 70~84) 合格 ;; *) 不合格 esac
实例
1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
if [ -e ~/test.sh ]
then
echo "存在test.sh"
if [ -x ~/test.sh ]
then echo "test.sh可执行"
else echo "test.sh无执行权限"
fi
else echo "不存在test.sh"
fi
2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
read -p 'input second' second
if [ $second -eq $second ] &>/dev/null
#用-eq排除非数字,由于输入非数字会输出错误报告,重定向到null设备
then
if [ $second -gt 0 ] && [ $second -le 10 ] #大于0s小于等于10s
then read -p 'input sexual(男女)' sexual
if [ $sexual == "男" ]
then echo "$second 晋级男组"
elif [ $sexual == "女" ]
then echo "$second 晋级女组"
else echo "性别错误"
fi
else echo "出局 $second"
fi
else echo "输入数字!"
fi
3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
for name in *.tar.*
do
[[ $name == *.tar.gz ]] && a='gz'
[[ $name == *.tar.bz2 ]] && a='bz2'
case $a in
gz)
tar -xzvf $name -C /opt
;;
bz2)
tar -xjvf $name -C /opt
;;
*)
echo "bad"
esac
done
echo "complete"
read -p "请输入你要解压的文件:" file
case $file in ky28.tar.gz
*.tar.bz2)
echo "正在解压bz2文件至opt目录中....."
tar -jxvf $file -C /opt
;;
*.tar.gz)
echo "正在解压gz文件至opt目录中....."
tar -zxvf $file -C /opt
;;
*)
echo "文件格式有误,请重新输入文件"
esac
4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。
read -p "input number" num
if [ $num -eq $num ] &>/dev/null
then
echo "整数"
else
echo "不是整数"
fi
5.根据上一题再判断输入的内容是奇数还是偶数。
read -p "input number" num
if [ $num -eq $num ] &>/dev/null
then
echo '整数'
if [ $(($num%2)) == 0 ]
then echo "偶数"
else echo "奇数"
fi
else
echo "不是整数"
fi
6.用if 语句判断主机是否存活
ping -c 5
[root@xue xue]# cat ping.sh
ping -c 5 192.168.80.101
if [ $? == 0 ]
then echo '存活'
else echo '不存活'
fi
ping -c 5 192.168.80.250
if [ $? == 0 ]
then echo '存活'
else echo '不存活'
fi
7.用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中
使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,
要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
read -p "输入start stop status restart以操作防火墙" choose
case $choose in
start)
service firewalld start
;;
stop)
service firewalld stop
;;
status)
service firewalld status
;;
restart)
service firewalld restart
;;
*)
echo "用法: $0 {start|stop|status|restart}"
esac