条件语句

146 阅读2分钟

条件测试语句

文件测试

test 操作符 表达式

  • -d测试文件是否为目录文件(Directory)
  • -f测试文件是否为普通文件(File)
  • -e测试目录或文件是否存在(Exist)。建议使用-e,-a可能不准确。
  • -a测试目录或文件是否存在(Exist)
  • -r测试当前用户是否有权限读取(Read)
  • -w测试当前用户是否有权限写入(Write)
  • -x测试当前用户是否有权限执行(eXcute)
  • -L测试是否为符号链接(软链接文件)

image.png

[root@localhost ~]# test -d /etc
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -f /etc/sysconfig/
[root@localhost ~]# echo $?
1

整数测试

格式[数值1 符号 数值2 ]

符号意义
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

image.png

字符串测试

常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,! 号表示相反的意思
  • -z:字符串内容为空
  • -n:字符是否存在

image.png

[root@localhost ~]# st1=aa
[root@localhost ~]# st2=bb
[root@localhost ~]# [ $st1 = $st2 ];echo $?
1
[root@localhost ~]# [ $USER = root ];echo $?
0
[root@localhost ~]# [ $USER != root ];echo $?
1

逻辑测试

逻辑测试两种格式:

#例:[表达式1] && [表达式2] 等同于 [表达式1 -a 表达式2] 等同于 [[表达式1 && 表达式2]]  
#例:[表达式1] || [表达式2] 等同于 [表达式1 -o 表达式2] 等同于 [[表达式1 || 表达式2]]
CMD1 && CMD2  全真才为真,一假即为假。
CMD1 || CMD2  一真即为真

image.png

if 单分支结构

if 判断条件  ​  
then 条件成立的分支代码  ​ 
fi

image.png

if 双分支结构

if 判断条件  
then   条件成立的分支代码  
else   条件不成立的分支代码  
fi
netstat -ntap | grep :80 &> /dev/null
if [ $? -eq 0 ]
then
echo "网站服务已在运行"
else
if rpm -q httpd &> /dev/null
then
echo "正在启动httpd服务"
systemctl start httpd
else
echo "正在安装并启动httpd服务"
yum install httpd -y &> /dev/null
systemctl start httpd &> /dev/null
fi
fi

image.png

if 多分支结构

if 判断条件1  
then   条件1为真的分支代码  ​  
elif 判断条件2  then   条件2为真的分支代码  ​  
elif 判断条件3  then   条件3为真的分支代码  ​  
...  
else   以上条件都为假的分支代码  ​  
fi


h=$(date +%H)
if [ $h -ge 6 -a $h -le 10 ]
then
echo "早上好"
elif [ $h -ge 11 -a $h -le 13 ]
then
echo "中午好"
elif [ $h -ge 14 -a $h -le 18 ]
then
echo "下午好"
elif [ $h -ge 19 -a $h -le 22 ]
then
echo "晚上好"
else
echo "休息时间"
fi

image.png

case语句

case 变量引用 in  
模式1)   
命令分支1   
;;  
模式2)   
命令分支2   
;;  
...  
*)   
默认命令分支  
esac
read -p "请输入你的分数(0-100):" grade
case $grade in
100)
echo "你很优秀"
;;
[89][0-9])
echo "你表现良好"
;;
[67][0-9])
echo "你及格了"
;;
[0-9]|[1-5][0-9])
echo "你不及格"
;;
*)
echo "输入有误,请重新输入0-100"
bash $0
esac

image.png