Linux 结构化命令 if-then 语句 if-then-else语句 嵌套if case命令
结构化命令允许改变shell脚本的正常执行流,最基本的结构化命令是if-then语句。也可以扩展if-then语句,加入一组当指定命令失败后由bash shell执行的命令,仅在测试命令返回非零退出状态码时,if-then-else语句才允许执行命令。elif等同于使用else if语句,会在测试命令失败时提供额外的检查。case命令是执行多个if-then-else命令的简便方式,参照一个值列表
目录
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会执行为该模式指定的命令。
# 可以通过竖线操作符在一行中分隔出多个模式模式。
# 星号会捕获所有与已知模式不匹配的值。
更多推荐
所有评论(0)