Redian新闻
>
Bash 基础知识系列 #7:If Else 语句 | Linux 中国

Bash 基础知识系列 #7:If Else 语句 | Linux 中国

科技
 
导读:如果这样,那就那样,否则就……。还不明白吗?了解了 Bash Shell 脚本中的 if-else 语句后就明白了。
本文字数:3214,阅读时长大约:4分钟

如果这样,那就那样,否则就……。还不明白吗?了解了 Bash Shell 脚本中的 if-else 语句后就明白了。

Bash 支持 if-else 语句,以便你可以在 shell 脚本中使用逻辑推理。

通用的 if-else 语法如下:

  1. if [ expression ]; then
  2. ## 如果条件为真则执行此块,否则转到下一个
  3. elif [ expression ]; then
  4. ## 如果条件为真则执行此块,否则转到下一个
  5. else
  6. ## 如果以上条件都不成立,则执行此块
  7. fi

正如你所注意到的:

◈ elif 用于 “否则如果” 类型的条件。
◈ if-else 条件始终以 fi 结尾。
◈ 使用分号 ; 和 then 关键字

在展示 if 和 else-if 的示例之前,我先分享一下常见的比较表达式(也称为测试条件)。

测试条件

以下是可用于数字比较的测试条件运算符:

< 如显示不全,请左右滑动 >
条件当满足以下条件时为真
$a -lt $b$a < $b$a 小于 $b
$a -gt $b$a > $b$a 大于 $b
$a -le $b$a <= $b$a 小于等于 $b )
$a -ge $b$a >= $b ($a 大于等于 $b
$a -eq $b$a == $b
$a -ne $b$a != $b

如果你要比较字符串,可以使用以下测试条件:

< 如显示不全,请左右滑动 >
条件当满足以下条件时为真
"$a" = "$b"$a 与 $b 相同
"$a" == "$b"$a 与 $b 相同
"$a" != "$b"$a 与 $b 不同
-z "$a"$a 为空字符串

文件类型检查也有条件:

< 如显示不全,请左右滑动 >
条件当满足以下条件时为真
-f $a$a 是一个文件
-d $a$a 是一个目录
-L $a$a 是一个链接

现在你已经了解了各种比较表达式,让我们在各种示例中看看它们的实际应用。

在 Bash 中使用 if 语句

让我们创建一个脚本来告诉你给定的数字是否为偶数。

这是我的脚本,名为 even.sh

  1. #!/bin/bash
  2. read -p "Enter the number: " num
  3. mod=$(($num%2))
  4. if [ $mod -eq 0 ]; then
  5. echo "Number $num is even"
  6. fi

当模数运算(%)整除给定数字(本例中为 2)时,它返回零。

🚧 特别注意空格。左括号和右括号与条件之间必须有空格。同样,条件运算符(-le、== 等)前后必须有空格。

这是我运行脚本时显示的内容:

Running a script with if statement example in bash

你是否注意到,当数字为偶数时,脚本会告诉你,但当数字为奇数时,脚本不会显示任何内容?让我们使用 else 来改进这个脚本。

使用 if else 语句

现在我在前面的脚本中添加了一条 else 语句。这样,当你得到一个非零模数(因为奇数不能除以 2)时,它将进入 else 块。

  1. #!/bin/bash
  2. read -p "Enter the number: " num
  3. mod=$(($num%2))
  4. if [ $mod -eq 0 ]; then
  5. echo "Number $num is even"
  6. else
  7. echo "Number $num is odd"
  8. fi

让我们用相同的数字再次运行它:

Running a bash script that checks odd even number

正如你所看到的,该脚本更好,因为它还告诉你该数字是否为奇数。

使用 elif(否则如果)语句

这是一个检查给定数字是正数还是负数的脚本。在数学中,0 既不是正数也不是负数。该脚本也检查了这一事实。

  1. #!/bin/bash
  2. read -p "Enter the number: " num
  3. if [ $num -lt 0 ]; then
  4. echo "Number $num is negative"
  5. elif [ $num -gt 0 ]; then
  6. echo "Number $num is positive"
  7. else
  8. echo "Number $num is zero"
  9. fi

让我运行它来涵盖这里的所有三种情况:

Running a script with bash elif statement

用逻辑运算符组合多个条件

到目前为止,一切都很好。但是你是否知道通过使用与(&&)、或(||)等逻辑运算符可以在一个条件中包含多个条件?它使你能够编写复杂的条件。

让我们编写一个脚本来告诉你给定的年份是否是闰年。

你还记得闰年的条件吗?它应该被 4 整除,但如果它能被 100 整除,那么它就不是闰年。但是,如果能被 400 整除,则为闰年。

这是我的脚本。

  1. #!/bin/bash
  2. read -p "Enter the year: " year
  3. if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then
  4. echo "Year $year is leap year"
  5. else
  6. echo "Year $year is normal year"
  7. fi

💡 注意上面双括号 [[ ]] 的使用。如果你使用逻辑运算符,则这是强制性的。

通过使用不同的数据运行脚本来验证脚本:

Example of running bash script with logical operators in if statement

🏋️ 练习时间

让我们做一些练习吧 😃

练习 1:编写一个 Bash Shell 脚本,检查作为参数提供给它的字符串的长度。如果未提供参数,它将打印 “empty string”。

练习 2:编写一个 Shell 脚本来检查给定文件是否存在。你可以提供完整的文件路径作为参数或直接在脚本中使用它。

提示:文件使用 -f 选项

练习 3:通过检查给定文件是否是常规文件、目录或链接或者是否不存在来增强之前的脚本。

提示:使用 -f、-d 和 -L

练习 3:编写一个接受两个字符串参数的脚本。脚本应检查第一个字符串是否包含第二个参数的子串。

提示:请参阅上一章 Bash 字符串🔗 itsfoss.com

我希望你喜欢 Bash 基础知识系列。在下一章中,你将了解如何在 Bash 中使用循环。继续编写 Bash!

(题图:MJ/1e8f2f5c-9e47-4c84-b8c1-072808e9cf70)


via: https://itsfoss.com/bash-if-else/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :geekpi
💎💎💎💎
翻译: 1988.5 篇
|
贡献: 3577 天
2013-10-25
2023-08-11
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
一文详解云计算基础知识迪拜喷泉灯光秀Linux 下“Hello World”的幕后发生了什么 | Linux 中国逃得过死亡,逃不过丈母娘Bash 基础知识系列 #6:处理字符串操作 | Linux 中国终端基础:在 Linux 中复制文件和目录 | Linux 中国比 Ubuntu 更好?Ubuntu 爱好者的 11 款最佳 Linux 发行版 | Linux 中国Rust 基础系列 #8:编写里程碑 Rust 程序 | Linux 中国Rust 基础系列 #7: 在 Rust 中使用循环 | Linux 中国存储系统基础知识全解(预告)你好,我是筚(bì)篥( lì)!服务器基础知识大科普Linux 中的 ls 命令使用教程 | Linux 中国如何在 Ubuntu 和其他 Linux 发行版中查看 AVIF 图像 | Linux 中国SparkyLinux 7 “Orion Belt” 评测:稳定性与新鲜感的结合 | Linux 中国Mageia 9 发布:搭载 Linux 内核 6.4,支持 PulseAudio | Linux 中国Bash 基础知识系列 #1:创建并运行你的第一个 Bash Shell 脚本 | Linux 中国Bash 基础知识系列 #2:在 Bash 中使用变量 | 技术复旦大学、中国科学院团队综述,化学机器学习:基础知识和应用Bash 基础知识系列 #9:Bash 中的函数 | Linux 中国Bash 基础知识系列 #3:传递参数和接受用户输入 | Linux 中国Linux Shell 介绍:Bash、Zsh 和 Fish | Linux 中国长篇小说《如絮》第一百三十一章 哈尔滨-1955年 全家福美国宪法是为了制约民主选举结果存储系统基础知识全解(终极版)算力网络基础知识(2023)雷达干扰的基础知识Bash 基础知识系列 #5:在 Bash 中使用数组 | Linux 中国【初中物理】初二、三物理基础知识分类汇编Linux0基础入门,教你如何在Shell中使用正则表达式10 个最佳 Linux 虚拟化软件 | Linux 中国Web 安全基础知识梳理(附PDF)中国医疗队在坦桑尼亚记实 (五)一文详解信创基础知识Bash 基础知识系列 #8:For、While 和 Until 循环 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。