Shell编程之条件语句

发布时间:2024年01月24日

目录

一.条件测试:

1.条件测试的基本概念:

2.文件测试:

?编辑3.整数数值比较:

4.字符串比较:

5.逻辑测试(短路运算):

二.if语句:

1.单分支:

??编辑

2.双分支?:

?3.多分支语句:

?三.case语句:


一.条件测试:

1.条件测试的基本概念:

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。

测试过程,实现评估布尔声明,以便用在条件性环境下进行执行

  • 若真,则状态码变量 $? 返回0
  • 若假,则状态码变量 $? 返回1

2.文件测试:

格式1 test 条件表达式
格式2 [ 条件表达式 ] ? ?#注意中括号和表达式中间需要隔一个空格
?

操作符作用
-d测试是否为目录
-e测试目录或文件是否存在
-f测试 指定的对象是否为文件;指定的文件是否存在
-L测试文件是否为符号链接(软链接文件)
-r测试 当前用户是否有读权限
-w测试 当前用户是否有写权限
-x测试 当前用户是否有执行权限
属性测试作用
-t fdfd 文件描述符是否在某终端已经打开
-s FILE是否存在且非空
-N FILE文件自从上一次被读取之后是否被修改过
-O FILE当前有效用户是否为文件属主
-G FILE当前有效用户是否为文件属组
  • ?test [操作符选项] 条件表达式
  • [? [操作符] 条件表达式? ]?

?

3.整数数值比较:

格式:[ 整数1 操作符 整数2 ] 公式 ?

  • -eq:等于(Equal)
  • -ne:不等于(Not Equal)
  • -gt:数大于(Greater Than)
  • -lt:小于(Lesser Than)
  • -le:小于或等于(Lesser or Equal)
  • -ge:大于或等于(Greater or Equal

4.字符串比较:

格式:[ "字符串1" 操作符 "字符串2" ]

? ? ?????? [ -z "字符串" ] 是否为空

????? ? ?? [ -n "字符串" ] 字符是否存在

常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,! 号表示相反的意思
  • -z:字符串内容为空
  • -n: 字符是否存在

?

5.逻辑测试(短路运算):

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...

格式2:命令1 操作符 命令2 ...

常见条件

  • -a或&&:逻辑与,“而且”的意思全真才为真
  • -o或||:逻辑或,“或者”的意思一真即为真
  • !:逻辑否

[ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] 等同于 [[ 表达式1 && 表达式2 ]] 
 
[ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] 等同于 [[ 表达式1 || 表达式2 ]] 

三元运算符

[? 表达式? ] && a || b

当条件表达式为真时,取a值;当条件表达式为假时,取b值

?

二.if语句:

1.单分支:

与[ 表达式 ] && 效果相同

if [ 表达式 ];then
  ...
fi

[root@localhost ~]# df  //查询磁盘信息
文件系统                   1K-块    已用    可用 已用% 挂载点
/dev/mapper/centos-root 10475520 4616528 5858992   45% /
devtmpfs                  917588       0  917588    0% /dev
tmpfs                     933512       0  933512    0% /dev/shm
tmpfs                     933512   17472  916040    2% /run
tmpfs                     933512       0  933512    0% /sys/fs/cgroup
/dev/sda1                1038336  182388  855948   18% /boot
tmpfs                     186704       4  186700    1% /run/user/42
tmpfs                     186704      32  186672    1% /run/user/0
/dev/sr0                 4414592 4414592       0  100% /run/media/root/CentOS 7 x86_64
 
[root@localhost ~]# vim test.sh
 
#!/bin/ bash
#磁盘使用率高于一定数值报警
 
USED=$(df | grep /dev/sda1 | awk '{print $5}' | awk -F '%' '{print $1}')
if [ $USED -gt 5 ] ; then
echo "警告!当前/目录的磁盘使用率为:$USED%"
fi
[root@localhost ~]# bash test.sh 
警告!当前/目录的磁盘使用率为:18%

?

2.双分支?:

 if [ 表达式 ];then
   ...
 else
   ...
 fi
??###########判断是否为超级管理员#######################
#!/bin/bash
if [ "$USER" != "root" ]
then
        echo "非管理员用户无权限操作"
else
echo "是管理员用户"
fi

?3.多分支语句:

if [ 表达式 ];then
  ...
elif [ 表达式 ];then
  ...
elif [ 表达式 ];then
  ...
[else]
 
fi
#!/bin/bash
read -p "请输入你的考试分数:" grade

if [ $grade -ge 85 ]&& [ $grade -le 100 ]
then
echo "你的成绩为$grade"
echo "你的成绩为优秀"

elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
then
echo "你的成绩为$grade"
echo "你的成绩为良好"
elif
[ $grade -ge 60 ]&&[ $grade -le 69 ]
then
echo "你的成绩为$grade"
echo "你的成绩为合格" 
else
echo "你的成绩为$grade"
echo "你的成绩不合格"
fi

?三.case语句:

case支持glob风格的通配符:

  • * 任意长度任意字符
  • ? 任意单个字符
  • [0-9] 指定范围内的任意单个字符
  • | ? 或者,如: a|b
case 变量 in 
模式1)
  ....
  ;;
 
模式2)
  ....
  ;;
  
*)  
  ....
  ;;
esca  
[root@localhost ~]# vim shuru.sh
 
#!/bin/bash
#输入yes或no中任意一个或多个字母的大小写都能识别为yes或n0
read -p "请输入yes/no: " key
case $key in
[nN]|[nN][oO])  
  echo "你输入的是no"
  ;;
[Yy]|[Yy][eE][Ss])
  echo "你输入的是yes"
  ;;
*)
  echo "你输入错误不是yes/no"
  ;;
esac
[root@localhost ~]# bash shuru.sh
请输入yes/no: y
你输入的是yes
[root@localhost ~]# bash shuru.sh
请输入yes/no: no
你输入的是no
[root@localhost ~]# bash shuru.sh
请输入yes/no: ni
shuru.sh:行11: echo你输入错误不是yes/no: 没有那个文件或目录
[root@localhost ~]# bash shuru.sh
请输入yes/no: mm
你输入错误不是yes/no

?

文章来源:https://blog.csdn.net/gfbcdgbb/article/details/135820543
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。