shell条件语句
2022/2/21 7:26:43
本文主要是介绍shell条件语句,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
一,条件测试
1.test命令
2.文件测试
3.整数值比较
4.字符串比较
5.逻辑测试
二,if语句
1)单分支结构
2)双分支结构
3)多分支结构
一,条件测试
1.test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1: test 条件表达式 格式2:[ 条件表达式 ] [root@localhost ~]# test -e 1.txt | echo $? 0
2.文件测试
[ 操作符 文件或目录 ]
常用的测试操作符
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
[root@localhost ~]# [ -f 1.txt ] && echo $? 0 [root@localhost ~]# test -e 1.txt | echo $? 0 [root@localhost ~]# [ ! -e /opt/back ] && echo $? 0 ##!取反
3.整数值比较
[ 整数1 操作符 整数2 ]
常用的测试操作符
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
[root@localhost ~]# [ 9 -gt 5 ] && echo "yes" yes [root@localhost ~]# who |wc -l 1 [root@localhost ~]#[ $(who | wc -l) -ge 3 ] && echo "> = 3 " [root@localhost ~]# echo $? 1
4.字符串比较
通常用于检查用户输入,系统环境是否满足要求,在提供交互式操作的shell脚本中,也可以用来判断用户输入的位置参数是否符合要求。
格式: [ 字符串1 = 字符串2 ] [ 字符串1 != 字符串2 ] 格式: [ -z 字符串 ] -z:检查字符串是否为空,对未定义或赋予空值的变量视为空串 例: [root@localhost ~]# echo $LANG zh_CN.UTF-8 [root@localhost ~]# [ $LANG != "en.US" ] && echo "NOT en.US" NOT en.US [root@localhost ~]# read -p "是否覆盖(yes/no)?" ACK 是否覆盖(yes/no)?yes [root@localhost ~]# [ $ACK = "yes" ] && echo "覆盖" 覆盖
5.逻辑测试
判断两个或多个条件之间的依赖关系,当系统用户取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程
格式: [ 表达式1 ] 操作符 [ 表达式2 ] 或 格式: 命令1 操作符 命令2 常用的测试操作符: -a或&& : 逻辑与,意思:而且 #只有当前后两个条件都成立时,整个测试命令的返回值才为0; 使用test命令测试时,&& 可改为 -a -o或|| : 逻辑或,意思:或者 #只要前后两个条件中有一个成立,整个测试命令的返回值即为0; 使用test命令测试时,|| 可改为 -o ! :逻辑否 #只有当指定的条件不成立时,整个测试命令的返回值才为0 例: [root@localhost ~]#[ -d /opt ] && [ -r /opt ] && echo "exist" exist [root@localhost ~]#[ -d /opt ] || [ -r /opt ] && echo "exist" exist [root@localhost ~]#[ -d /opt -o -f /opt ] && echo "exist" exist 例: [root@localhost ~]#M=$(uname -r | awk -F. '{print $1}') [root@localhost ~]#S=$(uname -r | awk -F. '{print $2}') [root@localhost ~]#[ $M -ge 3 ] && [ $S -gt 4 ] && echo "符合要求" 符合要求
二,if语句
1)单分支结构
语句:对于单分支的选择结构,只有在"条件成立"时才会执行相应的代码,否则不执行任何操作。
格式: if 条件测试操作 then 命令序列 fi #开头结尾凑成一对,否则语法错误 格式: if 条件测试操作;then 命令序列 fi 例: [root@localhost ~]# if [ 2 -gt 1 ]; then echo "ok"; fi ok [root@localhost ~]# if [ 2 -gt 1 ]; then \ > echo "yes" > fi yes
2)双分支结构
格式: if 条件测试操作 then 命令序列1 else 命令序列2 fi 例: 判断登录用户是否为管理员 #!/bin/bash if [ $UID -eq 0 ] then echo "当前登录用户是管理员root" else echo "当前登录为非管理员" fi 例: 输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码 #!/bin/bash read -p "请输入要创建的用户名:" name id $name &> /dev/null if [ $? -eq 0 ] then echo "该用户已经存在" else useradd $name echo "123456" | passwd --stdin $name &> /dev/null echo "已创建用户,初始密码为123456" fi
3)多分支结构
多分支if语句的结构能够根据多个互斥的条件分别执行不同的操作
格式: if 条件测试操作1 then 命令序列1 elif 条件测试操作2 then 命令序列2 else 命令序列3 fi 例: 判断文件类型 #!/bin/bash read -p "请输入要查找的内容:" name if [ -d $name ] then echo "这是一个目录" elif [ -f $name ] then echo "这是一个文件" else echo "无法判断文件类别" fi
4)case多分支结构
case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认命令序列 esac
例:成绩等级 #!/bin/bash read -p "请输入您的分数(1-100):" score case $score in 8[5-9]|9[0-9]|100) echo "您的分数为$score,优秀" ;; 7[0-9]|8[0-4]) echo "您的分数为$score,一般般" ;; [0-9]|[1-6][0-9]) echo "您的分数为$score,30遍" ;; *) echo "输入有误,请重新输入" esac
脚本四步:
需求,命令,变量,语法
这篇关于shell条件语句的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10百万架构师第十三课:源码分析:Spring 源码分析:Spring核心IOC容器及依赖注入原理|JavaGuide
- 2025-01-10便捷好用的电商API工具合集
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀