1. 选择控制结构
1.1 if…then命令
- 用于实现单分支选择结构
# 语法格式1:
---------------------
if command
then
commands
fi
#--------------------
# 语法格式2:
---------------------
if command; then
commands
fi
#--------------------
1.2 工作逻辑
- 如果command执行成功,就执行then部分的commands命令,然后退出if命令
- 否则直接退出if命令,执行其后的命令
1.3 if…then…else命令
- 用于实现双分支选择结构
#语法格式1:
#-----------
if command
then
command1
else
command2
fi
#-----------
#语法格式2:
#-----------
if command; then
command1
else
command2
fi
#-----------
#注:如果将两条shell命令放在同一行,则需要使用";"分隔
1.4 工作逻辑
- 如果command执行成功,就执行then部分的command1命令,然后退出if命令。
- 否则执行else部分的command2命令,然后退出if命令。
1.5 if命令嵌套
- 用于实现多分支选择结构
#语法格式1:
#-------------
if command1
then
command11
elif command2
then
command22
...
[else
commandnn]
fi
#-------------
#语法格式2:
#-------------
if command1; then
command11
elif command2; then
command22
...
[else
commandnn]
fi
#-------------
- 注意:if嵌套可以无限嵌套下去,但是不建议嵌套层次过深,不超过3层为宜
1.6 工作逻辑
- 如果command1执行成功,就执行then部分的command11命令,然后退出if命令
- 否则继续执行elif部分的command2命令,如果退出码为0,则执行then部分的command22,然后退出if命令
- 否则,如果后面还有elif部分,就继续进行步骤2的逻辑。
- 所有if或elif部分的命令均执行失败,如果else部分存在,则执行该部分的commandn,然后退出整个if命令,否则,直接退出整个if命令
1.7 case esac命令
# 语法格式1:
case value in
mode1)
command1
command2
...
;;
mode2)
command1
command2
...
;;
*)
command1
command2
...
;;
esac
# 语法格式2:
case value in
mode1) command1;command2;...;;
mode2) command1;command2;...;;
*) command1;command2;...;;
esac
注意:
- 与C语言switch…case语句执行逻辑类似
- ;; 类似于C语言switch…case语句中的break语句
- *) 类似于C语言switch…case语句中的default:
2. 循环控制结构
2.1 for命令
#语法格式1:
#---------------
for var in list
do
commands
done
#---------------
#语法格式2:
#---------------
for var in list; do commands; done
#---------------
执行逻辑
- list表示一个序列,例如:多字符串、数组
- 每次从list中取一个元素放到var变量后,执行commands;
- 提取顺序为:自左向右
- 如果list已经没有可取元素后,整个循环退出
2.2 while命令
- while命令可以看作if-then和for命令的混合体。
#语法格式:
while command
do
commands
done
执行逻辑
- 如果command命令退出码为0,则执行do后的循环体;
- 如果command命令退出码非0,则退出while循环;
3. 函数
- 有名称的代码段。
3.1 无参无返回值函数定义及调用
#无参数函数定义:
[function] 函数名()
{
commands # 函数体代码段
}
#无参数函数调用
函数名
3.2 有参有返回值函数定义及调用
#有参函数定义:
[function] 函数名()
{
# 通过$1,$2,$3,...作为参数名编写函数体代码段
commands
return 返回值
}
#有参函数调用
#参数1:$1,参数2:$2,参数3:$3....
函数名 参数1 参数2 参数3
#接收函数返回值
变量名=$?