0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在bash中使用条件语句

CHANBAEK 来源:TIAP 作者:TIAP 2022-12-09 17:27 次阅读

今天我们介绍一下如何在 bash 中使用条件语句。

在 bash 中使用 if 语句

在绝大多数编程语言中,if 语句都是最基本的条件语句。在 bash 中其语法如下:

if [ condition ]; then
  your code
fi

if 语句以 fi(与if相反)结束。

注意空格:

  • 在开始括号之后,与结束括号之前,都必须要有一个空格,否则 shell 将报错;
  • 条件运算符(=,==,<=等)前后必须有空格,否则将报错。

我们创建一个示例脚本 root.sh,当你以 root 身份运行该脚本的时候,才会进入 if 语句:

#!/bin/bash


if [ $(whoami) = 'root' ]; then
    echo "You are root"
fi

whoami 命令输出当前用户名。在 bash 变量教程中,我们介绍了 $(command) 结构的语法用于命令替换。

所以,当你以 root 用户身份登录时,条件 $(whoami) = 'root' 才为真。

图片

if-else 语句

上述代码中,如果当前用户不是 root,将看不到任何输出。当 if 条件为 false 的时候,需要将其执行的代码放到 else 语句中,如下所示:

#!/bin/bash


if [ $(whoami) = 'root' ]; then
    echo "You are root"
else
    echo "You are not root"
fi

此时,当你以普通用户运行脚本的时候,会输出 You are not root,如下所示:

$ ./root.sh
You are not root

使用 else if 语句

当有多个表达式(条件)时,可以使用 elif(else-if)语句。看下面的例子,我们创建一个名为 age.sh 的脚本:

#!/bin/bash


AGE=$1


if [ $AGE -lt 13 ]; then
    echo "You are a kid."
elif [ $AGE -lt 20 ]; then
    echo "You are a teenager."
elif [ $AGE -lt 65 ]; then
    echo "You are an adult."
else
    echo "You are an elder."
fi

上述代码中的 -lt 即小于(less than)。在前面的文章中我们介绍过如何给 bash 脚本传递参数,现在我们运行一下 age.sh,并传递不同的参数

$ ./age.sh 11
You are a kid.
$ ./age.sh 18
You are a teenager.
$ ./age.sh 44
You are an adult.
$ ./age.sh 70
You are an elder.

需要注意的是,在条件语句中,可以有多个 elif ,但是只能有一个 else,且必须使用 fi 关闭。

在 bash 中嵌套使用 if 语句

if 语句可以嵌套使用。看如下 weather.sh 脚本:

#!/bin/bash


TEMP=$1


if [ $TEMP -gt 5 ]; then
    if [ $TEMP -lt 15 ]; then
        echo "The weather is cold."
    elif [ $TEMP -lt 25 ]; then
        echo "The weather is nice."
    else
        echo "The weather is hot."
    fi
else
    echo "It's freezing outside ..."
fi

上述脚本接受温度作为参数,然后显示一条反应天气情况的信息。当温度大于 5 度的时候,就会进入嵌套的 if 语句。我们运行一下该脚本:

$ ./weather.sh 0
It's freezing outside ...
$ ./weather.sh 8
The weather is cold.
$ ./weather.sh 16
The weather is nice.
$ ./weather.sh 30
The weather is hot.

在 bash 中使用 case 语句

我们还可以在 bash 中使用 case 语句来替换多个 if 语句,其构造的一般语法如下:

case "variable" in
"pattern1" )
Command … ;;
"pattern2" )
Command … ;;
"pattern2" )
Command … ;;
esac

注意:

  • 条件语句最后总会包含一个空格和右括号 );
  • 条件语句后的命令以两个分号 ;; 结束,其前面的空格可有可没有;
  • case 语句 以 esac 结尾(与 case 相反)。

case 语句在处理模式匹配或正则表达式的时候特别有用。作为演示,我们创建一个名为 char.sh 的脚本:

#!/bin/bash


CHAR=$1


case $CHAR in
[a-z])
echo "Small Alphabet." ;;
[A-Z])
echo "Big Alphabet." ;;
[0-9])
echo "Number." ;;
*)
echo "Special Character."
esac

上述脚本接受一个字符作为参数,并显示该字符是大写字母,还是小写字母、数字还是特殊字符。

$ ./char.sh a
Small Alphabet.
$ ./char.sh Z
Big Alphabet.
$ ./char.sh 7
Number.
$ ./char.sh $
Special Character.

上述脚本中我使用了通配符 * 来定义默认字符,它相当于 if 语句中的 else 语句。

bash 中的测试条件

有许多测试条件可以与 if 语句一起使用。如果使用数字、字符串或文件,测试条件会有所不同。将它们视为bash中的逻辑运算符。

下表列出一些最常用的测试条件:

条件 相当于
a -ltb **a <**b
a -gtb **a >**b
a -leb **a <=**b
a -geb **a >=**b
a -eqb a 等于b
a -neb a 不等于b
-e**FILE **FILE 存在
-d**FILE **FILE 存在且是一个目录.
-f**FILE **FILE 存在且是一个常规文件.
-L**FILE **FILE 存在且是一个软链接.
**STRING1 =**STRING2 STRING1 等于STRING2
**STRING1 !=**STRING2 STRING1 不等于STRING2
-z**STRING1 **STRING1 是空的

上面这些测试条件不需要专门记,可以在 man 手册中查看:

$ man test

我们创建一个名为 filetype.sh 的脚本,用来检查文件是常规文件、目录还是软链接:

#!/bin/bash


if [ $# -ne 1 ]; then
    echo "Error: Invalid number of arguments"
    exit 1
fi


file=$1


if [ -f $file ]; then
    echo "$file is a regular file."
elif [ -L $file ]; then
    echo "$file is a soft link."
elif [ -d $file ]; then
    echo "$file is a directory."
else
    echo "$file does not exist"
fi

在脚本的开始,我们检查一下参数的数量,如果没有参数或者有多个参数,脚本会输出一条消息并退出。下面是运行情况:

$ ./filetype.sh weather.sh
weather.sh is a regular file.
$ ./filetype.sh /bin
/bin is a soft link.
$ ./filetype.sh /var
/var is a directory.
$ ./filetype.sh 
Error: Invalid number of arguments

在同一行中编写 if else 语句

到目前为止,我们上述代码都是在规范的缩进格式下写的,这是一种规范的写法,但并不是非这样写不可。

当你只想在 shell 中看到结果时,可以在单行中使用 if else 语句。

假设我们有如下脚本:

if [ $(whoami) = 'root' ]; then
    echo "You are root"
else
    echo "You are not root"
fi

可以在一行代码中这样写:

if [ $(whoami) = 'root' ]; then echo "root"; else echo "not root"; fi

大家可以运行一下上面的脚本,看看结果。

基本上,就是在命令结束后添加分号 ; ,然后写下一条语句。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 命令
    +关注

    关注

    5

    文章

    683

    浏览量

    22011
  • 脚本
    +关注

    关注

    1

    文章

    389

    浏览量

    14858
  • Bash
    +关注

    关注

    0

    文章

    57

    浏览量

    10179
收藏 人收藏

    评论

    相关推荐

    何在bash shell脚本中使用变量

    如果你使用编程语言编写过程序,那么一定接触过变量。而在 bash 脚本的编写时,变量也是一个很重要的概念。今天我们分享一下如何在 bash 脚本中使用变量。
    发表于 12-02 16:32 2105次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b> shell脚本<b class='flag-5'>中使</b>用变量

    何在bash脚本中创建第一个数组

    在前面的文章中,我们介绍了如何在 bash 中使用有限数量的变量,比如要保存一个或两个文件名或用户名。
    发表于 12-02 16:53 851次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b>脚本中创建第一个数组

    何在bash中使用运算符来执行算术运算

    在编写 bash 脚本的时候,经常会遇到需要计算数学结果的情况,比如需要计算磁盘剩余空间、文件大小、密码到期时间、主机数量、网络带宽等。
    发表于 12-07 17:13 1758次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>bash</b><b class='flag-5'>中使</b>用运算符来执行算术运算

    鸿蒙TypeScript入门学习第6天:【条件语句

    条件语句用于基于不同的条件来执行不同的动作。 TypeScript 条件语句是通过一条或多条语句
    的头像 发表于 04-01 13:51 752次阅读
    鸿蒙TypeScript入门学习第6天:【<b class='flag-5'>条件</b><b class='flag-5'>语句</b>】

    JavaScript 【4】 条件语句

    JavaScript if...Else 语句条件语句用于基于不同的条件来执行不同的动作。条件语句
    发表于 07-17 10:36

    何在C程序中使用汇编

    怎样在C程序中使用汇编,如何在C程序中使用汇编:方法一:在每个汇编语句前加asm即可。如:void reset_data(void) { asm mov r0,#0dfh asm
    发表于 09-23 23:43 55次下载

    浅谈条件语句的可综合性

    条件语句的可综合性 HDL语言的条件语句与算法语言的条件语句,最大的差异在于: 1.不管
    的头像 发表于 05-12 09:12 1832次阅读
    浅谈<b class='flag-5'>条件</b><b class='flag-5'>语句</b>的可综合性

    条件判断语句(if语句

    条件判断语句,作为任何编程语言都不可缺少的内容,在C语言中也不例外。条件判断语句可以让程序的功能更加复杂,从而实现各种各样的功能。
    的头像 发表于 02-21 15:24 3492次阅读
    <b class='flag-5'>条件</b>判断<b class='flag-5'>语句</b>(if<b class='flag-5'>语句</b>)

    详解Python条件语句

    在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。
    的头像 发表于 04-19 15:39 813次阅读

    Verilog中的If语句和case语句介绍

    。这些语句统称为顺序语句。case 语句和 if 语句都是 verilog 中顺序语句的示例。在这篇文章的其余部分,我们将讨论如
    的头像 发表于 05-11 15:37 4506次阅读
    Verilog中的If<b class='flag-5'>语句</b>和case<b class='flag-5'>语句</b>介绍

    条件语句/循环语句simulink的实现方法(一)

    条件语句和循环语句是计算机编程中常用的两种控制结构
    的头像 发表于 07-21 16:48 1.1w次阅读
    <b class='flag-5'>条件</b><b class='flag-5'>语句</b>/循环<b class='flag-5'>语句</b>simulink的实现方法(一)

    Python条件条件语句

    if语句 对于if语句,若条件判定为真,那么后面的语句块就会被执行。若条件判定为假,语句块就会被
    的头像 发表于 09-12 16:45 603次阅读

    BASH shell脚本篇—条件命令

    这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。
    的头像 发表于 10-11 15:21 617次阅读
    <b class='flag-5'>BASH</b> shell脚本篇—<b class='flag-5'>条件</b>命令

    python if语句多个条件怎么用

    所有条件都必须为True才会执行if语句中的代码块,or运算符表示只要有一个条件为True就会执行代码块,而not运算符则用于反转条件的结果。 以下是一个示例代码,演示了如
    的头像 发表于 11-21 16:45 3028次阅读

    sql语句多个条件怎么连接

    SQL语句中使用了两个条件,age >= 25表示年龄大于等于25,age OR运算符用于满足多个条件中的至少一个条件的情况。例如,
    的头像 发表于 11-23 11:34 2424次阅读