玄子Share-Shell编程之条件语句

devtools/2024/11/13 10:08:45/

玄子Share-Shell编程之条件语句

条件测试操作

test命令

测试表达式是否成立,若成立返回0,否则返回其他数值

shell">格式1:test  条件表达式
格式2:[  条件表达式  ]
# 至少应有一个空格

文件测试

shell">[  操作符  文件或目录  ]
shell">[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 
# 逻辑与,“而且”的意思

整数值比较

shell">[  整数1  操作符  整数2  ]
  • -eq:等于(Equal)
  • -ne:不等于(Not Equal)
  • -gt:大于(Greater Than)
  • -lt:小于(Lesser Than)
  • -le:小于或等于(Lesser or Equal)
  • -ge:大于或等于(Greater or Equal)
shell">[root@localhost ~]# who | wc -l
7
[root@localhost ~]# [ $(who | wc -l) -gt 5 ] && echo "Too many." 
Too many.
# 用户数是否 > 5
[root@localhost ~]# [ $(who | wc -l) -ge 10 ] && echo "> = 10."
# 用户数是否 >= 10
[root@localhost ~]# FreeCC=$(free -m | grep "Mem: " | awk '{print $6}')
[root@localhost ~]# [ $FreeCC -lt 1024 ] && echo ${FreeCC}MB
275MB
# 空闲内存是否 < 1024MB

字符串比较

shell">[  字符串1  =  字符串2 ]
[  字符串1  !=  字符串2 ]
[  -z  字符串 ]
  • =:字符串内容相同
  • !=:字符串内容不同,
  • ! 号表示相反的意思
  • -z:字符串内容为空
shell">[root@localhost ~]# echo $LANG 
zh_CN.UTF-8
[root@localhost ~]# [ $LANG !=  "en.US" ] && echo  "Not en.US"
Not en.US
# 测试当前语言环境
shell">[root@localhost ~]# read -p “是否覆盖现有文件(yes/no)?"  ACK
是否覆盖现有文件(yes/no)?yes
[root@localhost ~]# [ $ACK = "yes" ] && echo "覆盖"
覆盖
# 测试读入的字符串是否为 yes

逻辑测试

shell">格式1:[  表达式1  ]  操作符  [  表达式2  ]  ... 
格式2:命令1  操作符  命令2  ... 
  • -a或&&:逻辑与,“而且”的意思
  • -o或||:逻辑或,“或者”的意思
  • !:逻辑否
shell">[root@localhost ~]# [  -d /etc  ]  &&  [ -r /etc ] &&  echo “You can open it“
[root@localhost ~]# [  -d /etc  ]  ||  [ -d /home ] &&  echo “ok“

if 语句的结构

单分支结构

shell">if  条件测试操作then   命令序列
fi
shell">if  已用磁盘空间>80%then   报警
fi

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

双分支结构

shell">if  条件测试操作then   命令序列1else   命令序列2
fi
shell">if  80端口是否在监听then   网站服务已在运行else   启动httpd服务
fi

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多分支结构

shell">if  条件测试操作1then  命令序列1
elif  条件测试操作2 then  命令序列2
else命令序列3
fi
shell">if  分数为85~100之间then   判为优秀
elif   分数为70~84之间then   判为合格
esle判为不合格
fi

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

if 语句应用示例

  • 判断挂载点目录,若不存在则自动创建
shell">[root@localhost ~]# cat chkmountdir.sh
#!/bin/bash
MOUNT_DIR="/media/cdrom/"
if [ ! -d $MOUNT_DIR ]
thenmkdir -p $MOUNT_DIR
fi
  • 判断目标主机是否存活,显示检测结果
shell">[root@localhost ~]# cat pinghost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
# “-c”“-i”“-W”选项,分别指定只发送三个测试包、间隔0.2秒、超时3秒
if [ $? -eq 0 ]
# 判断ping命令的检测结果,分别给出不同提示
thenecho "Host $1 is up."
elseecho "Host $1 is down."
fi
  • 判断分数范围,分出优秀、合格、不合格三档
shell">[root@localhost ~]# cat gradediv.sh
#!/bin/bash
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
# 判断分数所在区间,给出不同的分档结果
thenecho "$GRADE 分,优秀!"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
thenecho "$GRADE 分,合格!"
elseecho "$GRADE 分,不合格!" 
fi

case 语句结构

shell">case  变量值  in
模式1)命令序列1;;
模式2)命令序列2;;……
* )默认命令序列
esac
shell">case 分数 in
85~100)判为优秀;;
70~84)判为合格;;......
*)判为不合格
esac

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

case 语句应用示例

shell">[root@localhost ~]# cat hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in[a-z]|[A-Z])		# 匹配任意字母echo "您输入的是字母.";;[0-9])# 匹配任意数字echo "您输入的是 数字.";;*)		# 匹配任意字符echo "您输入的是 空格、功能键或其他控制字符."
esac

玄子Share-Shell编程之条件语句 2024-04-24


http://www.ppmy.cn/devtools/19327.html

相关文章

状态模式:管理状态转换的策略

在软件设计中&#xff0c;某些对象在其生命周期内会有不同的状态&#xff0c;并且这些状态之间可以相互转换。状态模式&#xff08;State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时改变其行为。这个模式将各种状态转移逻辑封装在独…

村庄集中式生活废水处理设备技术工艺

诸城市鑫淼环保小编带大家了解一下村庄集中式生活废水处理设备技术工艺 工艺&#xff1a; 生物接触氧化法指由浸没在污水中的填料和曝气系统构成的污水处理方法&#xff0c;在有氧条件下&#xff0c;污水与填料表面的生物膜广泛接触&#xff0c;使污水得到净化。填料指在污水处…

ollama集成open-webui本地部署大模型应用

文章目录 概述安装ollama运行指定模型命令帮助docker 安装 webuiWebUI与ollama在同一台机器WebUI与ollama不在同一台机器(推荐)更新open-webui离线安装open-webui使用验证访问导入模型文件参考资料概述 ollama是一款在本地启动并运行大型语言模型的工具,主要功能是在 Docke…

c++ opencv

文章目录 错误1. C2039 "channels": 不是 "cv::DataType<_Tp>" 的成员2. 注意cv::mat的类型3. cv::mat求inv4. vector subscript out of range5. 使用determinant求行列式注意点 其他1.Vec3b的赋值与访问2. cv::mean3. 将cv::mat三通道改为单通道且保…

第二章:计算机系统基础知识之计算机网络

计算机网络 计算机网络是利用通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来&#xff0c;并依靠网络软件及通信协议实现资源共享和信息传递的系统。   计算机网络技术主要涵盖通信技术、网络技术、组网技术和网络工程等四个方面。 计算机…

安装 wsl-ubuntu 24.04

安装 wsl-ubuntu 24.04 1. 安装 Ubuntu-24.042. (可选)配置阿里云软件源3. 系统更新 1. 安装 Ubuntu-24.04 安装 Ubuntu-24.04&#xff0c;默认会安装在 C 盘&#xff0c; wsl --install -d Ubuntu-24.04导出 Ubuntu-24.04&#xff0c; wsl --export Ubuntu-24.04 D:\tmp\Ub…

Mac如何更换终端默认的python版本

一、Mac中如何更换终端默认的python版本 1、打开终端输入下列代码&#xff0c;打开配置文件 open ~/.bash_profile 2.在打开的配置文件中输入&#xff08;以下代码3.12替换为所下载的版本即可&#xff09; #下面是修改python版本的命令就是环境变量 export PYTHON_HOME/Lib…

深拷贝与浅拷贝-附深拷贝工具类

深拷贝与浅拷贝的区别 浅拷贝只是拷贝了源对象的地址&#xff0c;所以当源对象发生改变时&#xff0c;拷贝的对象的值也会对应发生改变。 深拷贝则是拷贝了源对象的所有值&#xff0c;而不是地址&#xff0c;所以深拷贝对象中的值不会随着源对象中的值的改变而改变。 浅拷贝只是…