您的位置:首页 > 教程 > linux > 详解Shell if else语句的具体使用方法

详解Shell if else语句的具体使用方法

2022-06-19 18:47:37 来源:易采站长站 作者:

详解Shell if else语句的具体使用方法

和其它编程语言类似,Shell也支持选择结构,并且有两种形式,分别是ifelse语句和casein语句。本节我们先介绍ifelse语句,casein语句将会在《Shellca...C7o站长之家-易采站长站-Easck.Com

和其它编程语言类似,Shell 也支持选择结构,并且有两种形式,分别是 if else 语句和 case in 语句。本节我们先介绍 if else 语句,case in 语句将会在《Shell case in》中介绍。C7o站长之家-易采站长站-Easck.Com

如果你已经熟悉了C语言、java、javascript 等其它编程语言,那么你可能会觉得 Shell 中的 if else 语句有点奇怪。C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

if 语句C7o站长之家-易采站长站-Easck.Com

最简单的用法就是只使用 if 语句,它的语法格式为:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

if condition
then
  statement(s)
fi

condition是判断条件,如果 condition 成立(返回“真”),那么 then 后边的语句将会被执行;如果 condition 不成立(返回“假”),那么不会执行任何语句。C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

从本质上讲,if 检测的是命令的退出状态,我们将在下节《Shell退出状态》中深入讲解。C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

注意,最后必须以fi来闭合,fi 就是 if 倒过来拼写。也正是有了 fi 来结尾,所以即使有多条语句也不需要用{ }包围起来。C7o站长之家-易采站长站-Easck.Com

如果你喜欢,也可以将 then 和 if 写在一行:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

if condition; then
  statement(s)
fi

请注意 condition 后边的分号;,当 if 和 then 位于同一行的时候,这个分号是必须的,否则会有语法错误。C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

实例1C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

下面的例子使用 if 语句来比较两个数字的大小:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

#!/bin/bash
read a
read b
if (( $a == $b ))
then
  echo "a和b相等"
fi

运行结果:C7o站长之家-易采站长站-Easck.Com
84↙C7o站长之家-易采站长站-Easck.Com
84↙C7o站长之家-易采站长站-Easck.Com
a和b相等C7o站长之家-易采站长站-Easck.Com

在《Shell (()) 》一节中我们讲到,(())是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算。当 a 和 b 相等时,(( $a == $b ))判断条件成立,进入 if,执行 then 后边的 echo 语句。C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

实例2C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

在判断条件中也可以使用逻辑运算符,例如:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

#!/bin/bash
read age
read iq
if (( $age > 18 && $iq < 60 ))
then
  echo "你都成年了,智商怎么还不及格!"
  echo "来C语言中文网(http://c.biancheng.net/)学习编程吧,能迅速提高你的智商。"
fi

运行结果:C7o站长之家-易采站长站-Easck.Com
20↙C7o站长之家-易采站长站-Easck.Com
56↙C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

&&就是逻辑“与”运算符,只有当&&两侧的判断条件都为“真”时,整个判断条件才为“真”。C7o站长之家-易采站长站-Easck.Com

熟悉其他编程语言的读者请注意,即使 then 后边有多条语句,也不需要用{ }包围起来,因为有 fi 收尾呢。C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

if else 语句C7o站长之家-易采站长站-Easck.Com

如果有两个分支,就可以使用 if else 语句,它的格式为:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

if condition
then
  statement1
else
  statement2
fi

如果 condition 成立,那么 then 后边的 statement1 语句将会被执行;否则,执行 else 后边的 statement2 语句。C7o站长之家-易采站长站-Easck.Com

举个例子:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

#!/bin/bash
read a
read b
if (( $a == $b ))
then
  echo "a和b相等"
else
  echo "a和b不相等,输入错误"
fi

运行结果:C7o站长之家-易采站长站-Easck.Com
10↙C7o站长之家-易采站长站-Easck.Com
20↙C7o站长之家-易采站长站-Easck.Com
a 和 b 不相等,输入错误C7o站长之家-易采站长站-Easck.Com

从运行结果可以看出,a 和 b 不相等,判断条件不成立,所以执行了 else 后边的语句。C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

if elif else 语句C7o站长之家-易采站长站-Easck.Com

Shell 支持任意数目的分支,当分支比较多时,可以使用 if elif else 结构,它的格式为:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

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

注意,if 和 elif 后边都得跟着 then。C7o站长之家-易采站长站-Easck.Com

整条语句的执行逻辑为:C7o站长之家-易采站长站-Easck.Com

如果 condition1 成立,那么就执行 if 后边的 statement1;如果 condition1 不成立,那么继续执行 elif,判断 condition2。
如果 condition2 成立,那么就执行 statement2;如果 condition2 不成立,那么继续执行后边的 elif,判断 condition3。
如果 condition3 成立,那么就执行 statement3;如果 condition3 不成立,那么继续执行后边的 elif。
如果所有的 if 和 elif 判断都不成立,就进入最后的 else,执行 statementn。

举个例子,输入年龄,输出对应的人生阶段:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

#!/bin/bash
read age
if (( $age <= 2 )); then
  echo "婴儿"
elif (( $age >= 3 && $age <= 8 )); then
  echo "幼儿"
elif (( $age >= 9 && $age <= 17 )); then
  echo "少年"
elif (( $age >= 18 && $age <=25 )); then
  echo "成年"
elif (( $age >= 26 && $age <= 40 )); then
  echo "青年"
elif (( $age >= 41 && $age <= 60 )); then
  echo "中年"
else
  echo "老年"
fi

运行结果1:C7o站长之家-易采站长站-Easck.Com
19C7o站长之家-易采站长站-Easck.Com
成年C7o站长之家-易采站长站-Easck.Com

运行结果2:C7o站长之家-易采站长站-Easck.Com
100C7o站长之家-易采站长站-Easck.Com
老年C7o站长之家-易采站长站-Easck.Com

再举一个例子,输入一个整数,输出该整数对应的星期几的英文表示:C7o站长之家-易采站长站-Easck.Com
C7o站长之家-易采站长站-Easck.Com

#!/bin/bash
printf "Input integer number: "
read num
if ((num==1)); then
  echo "Monday"
elif ((num==2)); then
  echo "Tuesday"
elif ((num==3)); then
  echo "Wednesday"
elif ((num==4)); then
  echo "Thursday"
elif ((num==5)); then
  echo "Friday"
elif ((num==6)); then
  echo "Saturday"
elif ((num==7)); then
  echo "Sunday"
else
  echo "error"
fi

运行结果1:C7o站长之家-易采站长站-Easck.Com
Input integer number: 4C7o站长之家-易采站长站-Easck.Com
ThursdayC7o站长之家-易采站长站-Easck.Com

运行结果2:C7o站长之家-易采站长站-Easck.Com
Input integer number: 9C7o站长之家-易采站长站-Easck.Com
errorC7o站长之家-易采站长站-Easck.Com

到此这篇关于详解Shell if else语句的具体使用方法的文章就介绍到这了,更多相关Shell if else语句内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!C7o站长之家-易采站长站-Easck.Com

如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • Linux下用GHOST来做系统备份

    Linux下用GHOST来做系统备份

    在Windows系统下备份我们可以用GHOST工具软件完成,Linux系统不能完全依赖于GHOST工具,一则是GHOST本身是有版权的软件,二是GHOST只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等
    2019-10-25
  • 给 FreeBSD 12.1 安装 GNOME3 图形界面

    给 FreeBSD 12.1 安装 GNOME3 图形界面

    FreeBSD是一个完全开放的、安全的系统,可以Do it yourself的系统。但是个人还是不喜欢呆板的命令行界面,所有就给 FreeBSD 12.1 安装 GNOME3 图形界面。 开始操作,启动FreeBSD 12.1,以root身份
    2019-10-27
  • Ubuntu Studio一个不错的操作系统

    Ubuntu Studio一个不错的操作系统

    Ubuntu Studio 是一个基于 Ubuntu 而面向音频、视频及图形爱好者的操作系统。本次推出的 Ubuntu Studio 为 7.04 版,目前仅支持 Intel i386 兼容的处理器。 Ubuntu Studio 从大量的开源多媒体创作程序
    2019-10-25
  • 最受欢迎的10款Linux免费游戏

    最受欢迎的10款Linux免费游戏

    图为在Linux下运行的免费游戏America's Army 如果你认为 Linux下没有什么好游戏的话,那就错了!我们来看看Linux下最受欢迎的10款游戏吧,而且这些游戏都是完全免费的! # skyreal update(06-12
    2019-10-25
  • compiz fusion特效使用心得(附3D桌面图)

    compiz fusion特效使用心得(附3D桌面图)

    3D桌面图 LINUX发行版就是好,当大多数人还在沉迷于那些什么风格图标鸟玻璃效果甚至孜孜不倦津津乐道的时候,Linux的高手们已经悄悄为我们开启了一个桌面系统3D的时代。 当我第一次
    2019-10-25
  • Ubuntu 下aMule 的安装配置

    Ubuntu 下aMule 的安装配置

    aMule 是一个类似于 eMule 的多平台 P2P 客户端程序。以下将简略叙述 aMule 在 Ubuntu 中的安装及配置 [High ID] 与 [KAD] 的过程。 安装: sudo apt-get install amule sudo apt-get install amule-utils 如果需要
    2019-10-25
  • JMeter jp@gc - stepping thread group插件

    JMeter jp@gc - stepping thread group插件

    这是一个出单接口压力测试的小例子,了解一下压力测试最最基础的基础。出单接口是用来保险出单的,不需要在UI界面下一步下一步的出单,接口一调数据入库完事~~~。再啰嗦一句接
    2019-10-27
  • Ubuntu 下使用K3B软件刻录光盘(图)

    Ubuntu 下使用K3B软件刻录光盘(图)

    不知大家会不会在Ubuntu下刻录光盘呢?k3b是KDE环境下的一个CD/DVD刻录软件,有非常容易使用的界面,功能比较齐全。用起来感觉就象是win下的Nero一样简单自然,比ubuntu里原来的刻录CD方式
    2019-10-25