shell条件语句

本文详细介绍了Shell脚本中的条件测试,包括test命令、文件测试、整数值比较、字符串比较和逻辑测试。此外,还讲解了if语句的单分支、双分支和多分支结构,以及case语句的用法,提供了多个实际示例来帮助理解如何在Shell脚本中进行条件判断和执行不同操作。
摘要由CSDN通过智能技术生成

shell条件语句

一,条件测试

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gyeET0CY-1644849833855)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1642903278021.png)]

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

脚本四步:

需求,命令,变量,语法

#!/bin/bash
read -p “请输入您的分数(1-100):” score
case s c o r e i n 8 [ 5 − 9 ] ∣ 9 [ 0 − 9 ] ∣ 100 ) e c h o " 您 的 分 数 为 score in 8[5-9]|9[0-9]|100) echo "您的分数为 scorein8[59]9[09]100)echo"score,优秀"
;;
7[0-9]|8[0-4])
echo “您的分数为 s c o r e , 一 般 般 " ; ; [ 0 − 9 ] ∣ [ 1 − 6 ] [ 0 − 9 ] ) e c h o " 您 的 分 数 为 score,一般般" ;; [0-9]|[1-6][0-9]) echo "您的分数为 score,";;[09][16][09])echo"score,30遍”
;;
*)
echo “输入有误,请重新输入”
esac

脚本四步:

需求,命令,变量,语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值