Shell脚本之if条件语句
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,条件测试test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值。格式一:test 条件表达式格式二:[ 条件表达式 ] (注意中括号与表达式间有空格)文件测试:格式
千家信息网最后更新 2026年11月02日Shell脚本之if条件语句
条件测试
test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值。
格式一:test 条件表达式
格式二:[ 条件表达式 ] (注意中括号与表达式间有空格)
文件测试:
格式:[ 操作符 文件或目录 ] (注意中括号与表达式间有空格)
常用的测试操作符:
-d:测试是否为目录(Directory)-e:测试目录或文件是否存在(Exist)-f:测试是否为文件(File)-r:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(Write)-x:测试当前用户是否有权限执行(eXcute)[root@localhost ~]# [ -d /media/cdrom ][root@localhost ~]# echo $?0 //返回0表示条件成立[root@localhost ~]# [ -d /media/cdrom/Server ][root@localhost ~]# echo $?1 //返回1表示条件不成立[root@localhost ~]# [ -d /media/cdrom ] && echo "YES" // " &&"表示当前面的测试成立时,则执行后面的命令YES[root@localhost ~]# [ -r /media/cdrom ][root@localhost ~]# echo $?1[root@localhost ~]# [ -w /media/cdrom ][root@localhost ~]# echo $?1[root@localhost ~]# [ -x /media/cdrom ][root@localhost ~]# echo $?1[root@localhost ~]#整数值比较:
格式:[ 整数1 操作符 整数2 ] (注意中括号与表达式间有空格)
常用的测试操作符:
-eq:等于(Equal)-ne:不等于(Not Equal)-gt:大于(Greater Than)-lt:小于(Lesser Than)-le:小于或等于(Lesser or Equal)-ge:大于或等于(Greater or Equal)[root@localhost ~]# who | wc -l7[root@localhost ~]# [ $(who | wc -l) -gt 5 ] && echo "Too many."Too many.[root@localhost ~]# [ $(who I wc -l) -ge10 ] && echo ">= 10."字符串与逻辑测试
字符串比较:
格式一:[ 字符串1 = 字符串2 ] 或[ 字符串1 != 字符串2 ] (" ! "表示取反)
格式二:[ -z 字符串 ]
常用的测试操作符:
=:字符串内容相同!=:字符串内容不同,!号表示相反的意思-z:字符串内容为空[root@localhost ~]# echo $LANGzh_ CN.UTF-8[root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US" //测试当前语言环境Not en.US[root@localhost ~]# read -p"是否覆盖现有文件(yes/no) ?"ACK //测试读入的字符串是否为yes是否覆盖现有文件(yes/no) ? yes[root@localhost ~]# [ $ACK = "yes"I && echo"覆盖"覆盖逻辑测试:
格式一:[ 表达式1 ] 操作符 [ 表达式2 ]
格式二:命令1 操作符 命令2
常用的测试操作符:
-a或&&:逻辑与,"而且"的意思-o或||: 逻辑或, "或者"的意思!:逻辑否[root@localhost ~]#[ -d /etc ] && [ -r /etc ] && echo"You can open it"[root@localhost ~]#[ -d /etc ] II [ -d /home ] && echo"ok"if语句
if单分支语句
基本格式:
if 条件测试操作 then 命令序列fi
例子:判断挂载点目录,若不存在则自动创建。
[root@localhost ~]# vim chkmountdir.sh#!/bin/bashMOUNT_DIR="/media/cdrom/" //当目录不存在时执行if [ ! -d $MOUNT_DIR ]then mkdir -p $MOUNT_ DIRfiif双分支语句
基本格式:
if 条件测试操作 then 命令序列1 else 命令序列2fi
例子:判断目标主机是否存活,显示检测结果。
[root@localhost ~]# vim pinghost.sh#!/bin/bashping -c 3 -i 0.2 -W 3 $1 &> /dev/null //-c包的个数,-i间隔秒数,-W等待时间if [ $? -eq 0 ] //判断ping命令的检测结果then echo "Host $1 is up." else echo "Host $1 is down."fiif多分支语句
基本格式:
if 条件测试操作1 then 命令序列1elif 条件测试操作2 then 命令序列2else 命令序列3fi例子:判断分数范围,分出优秀、合格、不合格三档。
[root@localhost ~]# vim gradediv.sh#!/bin/bashread -p "请输入您的分数(0-100):" GRADEif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]then echo "$GRADE分,优秀!"elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]then echo "$GRADE分,合格!"else echo "$GRADE分,不合格!"fiif嵌套语句
嵌套结构其实就是在前面这三种结构里,再加一层if判断语句。下面我直接用例子演示说明吧。这个Shell脚本主要实现功能就是,当你输入成绩时,会进行一次判断,当输入成绩为10秒以内(包含10秒),则进入决赛,否则淘汰。而进入决赛后,会提示输入性别进行判断分组,性别为男则分到男子组,否则分到女子组。
[root@localhost opt]# vim group.sh#!/bin/bashread -p "请输入您的成绩:" scoif [ $sco -le 10 ]then echo "恭喜您进入决赛!" read -p "请输入您的性别:" sex if [ $sex = "男" ] then echo "您被分到了男子组!" else echo "您被分到了女子组!" fielse echo "很遗憾您被淘汰了!"fi执行结果如下:
[root@localhost opt]# chmod +x group.sh [root@localhost opt]# ./group.sh 请输入您的成绩:9恭喜您进入决赛!请输入您的性别:男您被分到了男子组![root@localhost opt]# ./group.sh 请输入您的成绩:9恭喜您进入决赛!请输入您的性别:女您被分到了女子组![root@localhost opt]# ./group.sh 请输入您的成绩:11很遗憾您被淘汰了![root@localhost opt]#
测试
命令
字符
字符串
格式
输入
条件
操作符
表达式
语句
序列
成绩
文件
性别
目录
逻辑
决赛
例子
常用
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
耶加雪菲
科技互联网技术
科技类互联网
互联网与新科技
南京欣网互联网科技
伴你行互联网科技有限公司
多迪互联网科技有限公司
银川新华互联网科技职业技术培训学校图片
常德市电业局互联网科技部
重庆互联网医院沙龙医盟信息科技
用友工业互联网科技发展
工业互联网科技成果转化
江苏互联网科技小贷
上海同邻互联网科技有限公司规模
互联网时代科技型公司的机会
互联网科技手抄报图片
中国互联网公司的科技投入
安徽零酒互联网科技有限公司
河南商务圈互联网科技有限公司
东风日产互联网科技公司叫什么
互联网科技活动banner
互联网为科技
美国互联网科技
互联网科技logo
猫创互联网科技
哈尔滨新华互联网科技
上海科技产业互联网平台
互联网第三次科技革命特征
中国新注册互联网科技
互联网科技机房