Shell脚本之if条件语句
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,条件测试test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值。格式一:test 条件表达式格式二:[ 条件表达式 ] (注意中括号与表达式间有空格)文件测试:格式
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
扫码录入数据库
58 布局网络安全
劲舞团和服务器连接中
游戏王数据库裁定是什么意思
央视网络安全比赛叫什么名
k3服务器建立中间层
简述网络安全技术发展趋势
举办网络安全竞赛的意义
自学软件开发 体会
异形孔向导找不到数据库
上海直销网络技术解决方案
不需要服务器的数据库
网站无法访问未连接服务器
游戏娱乐软件开发
基于数据库的课程设计
网络安全的大赛
如何使用脚本建立数据库链接
网络服务器ad管理教程
网络安全监察徽章
软件开发工程与社会
tplink无法上传数据库
网络安全鹏程学校
闵行区个人软件开发质量推荐
资阳软件开发公司推荐
数据库 至少选修
网站无法访问未连接服务器
我赞成网络技术
游戏服务器架构设计数据库
软件开发工作两年内代码量
网络安全中心张总工程师