【前端&运维那点事儿】十:Shell编程之条件判断与分支语句

960 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

Hi~,我是一碗周,如果写的文章有幸可以得到你的青睐,万分有幸~

🍇 写在前面

先来介绍一下新开的这个专栏:《前端&运维那点事儿》将会从前端的角度,依次学习Linux→Nginx→Docker→持续集成→k8s,从而打造一个属于站在前端角度的运维专栏。

在这篇文章中我们将来学习一下Shell中的条件判断、if语句以及case语句,在介绍完基础语法后,都会携带一个简单的小例子。

🥭 条件判断

Shell中的条件判断可以通过test命令或者[ 表达式 ]实现,两种方式的最终效果是相同的,不过需要注意的是使用第二种时中括号的两边的空格是不能少的

🍍 判断文件类型

通过一些选项可以判断文件类型,如下表所示:

选项含义
-d文件是否存在并且是目录
-e文件是否存在
-f文件是否存在并且是普通文件
-b文件是否存在并且是块设备文件
-c文件是否存在并且是字符设备文件
-L文件是否存在并且是链接文件
-p文件是否存在并且是管道文件
-s文件是否存在并且是否为非空
-S文件是否存在并且是套接字文件

如下示例判断了文件是否存在,并输出true和false:

[root@ywanzhou ~]$ [ -e install.sh ] && echo "true" || echo "false"
true
[root@ywanzhou ~]$ [ -e install.ssh ] && echo "true" || echo "false"
false

🍌 判断文件权限

shell中提供的判断文件权限选项如下:

选项含义
-r文件是否存在,并且是否拥有读权限
-w文件是否存在,并且是否拥有写权限
-x文件是否存在,并且是否拥有执行权限

例子如下:

[root@ywanzhou ~]$ [ -r install.sh ] && echo "true" || echo "false" # 判断文件具有写权限
true

🍋 判断数值

在Shell判断两个数值是否相等或者大于还是小于采用的也是一项选项,具体如下:

选项含义
整数1 -eq 整数2判断整数1是否和整数2相等
整数1 -ne 整数2判断整数1是否和整数2不相等
整数1 -gt 整数2判断整数1是否大于整数2
整数1 -lt 整数2判断整数1是否小于整数2
整数1 -ge 整数2判断整数1是否大于等于整数2
整数1 -le 整数2判断整数1是否小于等于整数2

示例如下:

[root@ywanzhou ~]$ [ 1 -eq 1 ] && echo 'true' || echo 'false' # 判断1是否等于1
true
[root@ywanzhou ~]$ [ 1 -eq 2 ] && echo 'true' || echo 'false' # 判断1是否等于2
false

🍊 字符串判断

判断字符串的选择如下:

选项含义
-z 字符串判断字否串是否为空
-n 字符中判断字符串是否为非空
字符串1 == 字符串2判断字符串1是否和字符串2相等
字符串1 != 字符串2判断字符串1是否和字符串2不相等

示例如下:

[root@ywanzhou ~]$ [ y == yiwanzhou  ] && echo 'true' || echo 'false'
false
[root@ywanzhou ~]$ [ y == y  ] && echo 'true' || echo 'false'
true
[root@ywanzhou ~]$ [ y != yiwanzhou  ] && echo 'true' || echo 'false'
true

🍉 多重判断

正则中也支持且、或、非的操作,其选项如下:

选项含义
判断1 -a 判断2逻辑与
判断1 -o 判断2逻辑或
!判断逻辑非

示例如下:

[root@ywanzhou ~]$ [ y == y -a z == z  ] && echo 'true' || echo 'false'
true

🍈 if语句

讲真的,shell中的if语句真的很诡异,它的语法如下:

# 单一if语句
if  condition
then
    statement1
fi

# if else 语句
if condition
then
    statement1
else 
    statement2
fi

# if elif else 语句
if  condition1
then
   statement1
elif condition2
then
    statement2
elif condition3
then
    statement3
……
else
   statementn
fi

下面几个理解展示了if语句的用法:

  1. 判断当前用户是否为root用户:

    #!/bin/bash
    user=$(whoami)
    if [ "$user" == root ]
    then
        echo 'root'
    else 
        echo 'not root'
    fi
    
  2. 判断输入的内容是否为目录:

    #!/bin/bash
    read -t 10 -p '请输入文件目录' dir
    if [ -d "$dir" ];then
        echo '当前是一个目录'
    fi
    

    then可以不用换行,只需要在条件后面增加一个分号即可。

  3. 用户输入成绩,输出成绩的状态:

    #!/bin/bash
    
    read -p "请输入成绩:" score
    
    if (( $score >= 95  )); then
        echo "优秀"
    elif (( $score >= 80 && $score < 95 )); then
        echo "良好"
    elif (( $score >= 60 && $score < 80 )); then
        echo "及格"
    else
        echo "不及格"
    fi
    

    上述代码中的条件判断在shell中也是支持的

🍇 写在最后

本篇文章到这就结束了,这篇文章中介绍了Shell中的条件判断,还介绍了三种if语句以及if语句的两种格式。

如果对本篇文章对你有所帮助,可以点赞收藏评论支持一下我;如果有所疑问,欢迎私信~

如果对这个专栏感兴趣可以点一个关注呦~