Shell脚本之if条件语句
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,条件测试test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值。格式一:test 条件表达式格式二:[ 条件表达式 ] (注意中括号与表达式间有空格)文件测试:格式
千家信息网最后更新 2025年01月31日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_ DIRfi
if双分支语句
基本格式:
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."fi
if多分支语句
基本格式:
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分,不合格!"fi
if嵌套语句
嵌套结构其实就是在前面这三种结构里,再加一层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安全错误
数据库的锁怎样保障安全
服务器2016如何设置自动锁屏
税务局数据库维护
国内软件开发单位排名
宝山区自动化软件开发价格查询
普通服务器的内存
数据库怎么打开
销售转软件开发
股票看盘系统软件开发
怎么查看自己的云服务器是几核的
服务器资源和数据迁移的项目报价
数据库中查询一个字段为空
运维系统数据库升级
软件服务器要求
区块链网络安全安博通
林毅谈网络安全
数据库要考什么证
服务器配管理和配置视频
王者荣耀转服务器怎么转安卓
关于小学生网络安全手抄报内容
越南租服务器哪家好
唐山互联网科技中心
华为招网络安全硕士吗
企业模拟沙盘软件开发公司
软件开发合同技术内容
衢州软件开发培训
龙之谷手游版本服务器
软件开发都需要什么基础
it网络安全维护
数据库主键能设置几个
停止安全中心通知服务器