目录

1、最基本的结构化命令:if-then语句

2、if-then-else语句

3、嵌套if

4、if-then高阶特征

1)双括号

2)双方括号

5、case命令


1、最基本的结构化命令:if-then语句

if command        
then
commands
fi

        bash shell的if语句会运行if后面的那个命令,如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行;如果该命令的退出状态码是其他值, then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。fi语句用来表示if-then语句到此结束

退出状态码(参见:Linux 基本命令 在命令行和脚本中进行数学表达式运算 退出脚本命令_想喝奶茶啾啾的博客-CSDN博客

#! /bin/bash
if pwd
then
echo "It worked"
fi
echo "We are outside the if statement"
# 上述脚本在if行采用了pwd命令。如果命令成功结束,echo语句就会显示该文本字符串。在
命令行运行该脚本时,会得到如下结果:
/home/Christine
It worked
We are outside the if statement

有的脚本中有另一种if-then 语句:

if command; then

        commands

fi

        在then部分,可以使用不止一条命令,可以像在脚本中的其他地方一样在这里列出多条
命令。bash shell会将这些命令当成一个块,如果if语句行的命令的退出状态值为0,所有的命令
都会被执行;如果if语句行的命令的退出状态不为0,所有的命令都会被跳过。

2、if-then-else语句

if command
then         
     command

else         
        command
fi

        当if语句中的命令返回退出状态码0时,then部分中的命令会被执行,返回非零退出状态码时,bash shell会执行else部分中的命令。

3、嵌套if

        else的另一种形式:elif,这样就不用再书写多个if-then语句

if command1
then
    commands
elif command2
then
    more commands
fi

        如果elif后命令的退出状态码是0,则bash会执行第二个then语句部分的命令。

4、if-then高阶特征

bash shell提供了两项可在if-then语句中使用的高级特性:

  • 用于数学表达式的双括号
  • 用于高级字符串处理功能的双方括号

1)双括号

符号描述
val++后增
val--后减
++val先增
--val先减
!逻辑求反
~位求反
**幂运算
<<左位移
>>右位移
&位布尔和
|位布尔或
&&逻辑和
||逻辑或
#!/bin/bash
# using double parenthesis
val1=10
if (( $val1 ** 2 > 90 ))
then
(( val2 = $val1 ** 2 ))
echo "The square of $val1 is $val2"
fi
$
# 执行上述脚本文件test23.sh
$ ./test23.sh
The square of 10 is 100

2)双方括号

        双方括号命令提供了针对字符串比较的高级特性。不是所有shell都支持双方括号,bash支持。

#!/bin/bash
# using pattern matching
if [[ $USER == r* ]]
then
echo "Hello $USER"
else
echo "Sorry, I do not know you"
fi
# 执行上述脚本文件test24.sh
$ ./test24.sh
Hello rich

        双等号将右边的字符串(r*)视为一个模式,并应用模式匹配规则,双方括号命令$USER环境变量进行匹配,看它是否以字母r开头,如果是的话,比较通过,shell会执行then部分的命令。

5、case命令

        

case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac

# 变量和模式是匹配的,那么shell会执行为该模式指定的命令。
# 可以通过竖线操作符在一行中分隔出多个模式模式。
# 星号会捕获所有与已知模式不匹配的值。

Logo

更多推荐