SHELL 流程控制
在shell的语句中,流程控制主要分为两种:
简单流程控制语句:选择和循环
复杂流程控制语句:函数
4.1 简单流程控制语句
4.1.1 单分支if语句
语法格式
if [ 条件 ] then 指令 fi
场景:
- 单一条件,只有一个输出
单分支if语句示例
#!/bin/bash # 单 if 语句的使用场景 if [ "$1" == "nan" ] then echo "您的性别是 男" fi
4.1.2 双分支if语句
语法格式:
if [ 条件 ] then 指令 1 else 指令 2 fi
场景:
- 一个条件,两种结果
双分支if语句示例
#!/bin/bash # 单 if 语句的使用场景 if [ "$1" == "nan" ] then echo "您的性别是 男" else echo "您的性别是 女" fi
4.1.3 多分支if语句
语法格式:
if [ 条件 ] then 指令 1 elif [ 条件 2 ] then 指令 2 else 指令 3 fi
场景:
- n个条件,n+1个结果
多分支if语句示例
#!/bin/bash # 多 if 语句的使用场景 if [ "$1" == "nan" ] then echo "您的性别是 男" elif [ "$1" == "nv" ] then echo "您的性别是 女" else echo "您的性别,我不知道" fi
多if语句生产场景: 服务的启动
需求:
- 要求脚本执行需要有参数,通过传入参数来实现不同的功能。
参数和功能详情如下:
参数 执行效果 start 服务启动中... stop 服务关闭中... restart 服务重启中... * 脚本 X.sh 使用方式 X.sh [ start stop restart ] 脚本内容:
tarena@tarena~$:/data/scripts/python-n# cat if.sh #!/bin/bash # 多 if 语句的使用场景 if [ "$1" == "start" ] then echo "服务启动中..." elif [ "$1" == "stop" ] then echo "服务关闭中..." elif [ "$1" == "restart" ] then echo "服务重启中..." else echo "$0 脚本的使用方式: $0 [ start | stop | restart ]" fi
4.1.4 case 选择语句
我们发现多if语句使用的时候,代码量很多,而且整体看起来确实有那么一丁点乱,有没有办法更好的实现这种效 果呢?就是Case语句。
case 语句格式
case 变量名 in 值 1) 指令 1 ;; 值 2) 指令 2 ;; 值 3) 指令 3 ;; esac
注意:
首行关键字是case,末行关键字esac
选择项后面都有 )
每个选择的执行语句结尾都有两个分号;
case语句示例
场景:在多if语句的基础上对脚本进行升级
需求:要求脚本执行需要有参数,通过传入参数来实现不同的功能
参数和功能详情如下:
参数 执行效果 start 服务启动中... stop 服务关闭中... restart 服务重启中... * 脚本 X.sh 使用方式 X.sh [ start stop restart ] 脚本内容:
# cat case.sh #!/bin/bash # case 语句使用场景 case "$1" in "start") echo "服务启动中..." ;; "stop") echo "服务关闭中..." ;; "restart") echo "服务重启中..." ;; *) echo "$0 脚本的使用方式: $0 [ start | stop | restart ]" ;; esac
4.1.5 for循环语句
循环指定的所有元素,循环完毕之后就推出
语法格式:
for 值 in 列表 do 执行语句 done
场景:
- 遍历列表
注意:
”for” 循环总是接收 “in” 语句之后的某种类型的字列表
执行次数和list列表中常数或字符串的个数相同,当循环的数量足够了,就自动退出
示例:遍历文件
#!/bin/bash # for 语句的使用示例 for i in $(ls /root) do echo "${i}" done
4.1.6 while循环语句
语法格式
while 条件 do 执行语句 done
注意:
- 条件的类型: 命令、[[ 字符串表达式 ]]、(( 数字表达式 ))
场景:
- 只要条件满足,就一直循环下去
while语句示例
#!/bin/bash # while 的示例 a=1 while [ "${a}" -lt 5 ] do echo "${a}" a=$((a+1)) donesss
4.1.7 until循环语句
语法格式:
until 条件 do 执行语句 done
注意:
- 条件的类型: 命令、[[ 字符串表达式 ]]、(( 数字表达式 ))
场景:
- 只要条件不满足,就一直循环下去
until 语句示例
#!/bin/bash # until 的示例 a=1 until [ "${a}" -eq 5 ] do echo "${a}" a=$((a+1)) done
4.2 复杂流程控制语句
函数就是我们的复杂流程控制语句
4.2.1 函数基础知识
函数是什么?
函数就是将某些命令组合起来实现某一特殊功能的方式,是脚本编写中非常重要的一部分。
简单的函数格式:
定义函数:
函数名(){ 函数体 }
调用函数:
函数名
传参函数格式:
传参数
函数名 参数
函数体调用参数:
函数名(){ 函数体 $n }
注意: 类似于shell内置变量中的位置参数
4.2.2 函数实践
简单函数定义和调用示例
#!/bin/bash # 函数使用场景一:执行频繁的命令 dayin(){ echo "wo de mingzi shi 111" } dayin
函数传参和函数体内调用参数示例
#!/bin/bash # 函数的使用场景二 dayin(){ echo "wo de mingzi shi $1" } dayin 111
函数调用脚本传参
#!/bin/bash # 函数传参演示 # 定义传参数函数 dayin(){ echo "wode mignzi shi $1" } # 函数传参 dayin $1
脚本传多参,函数分别调用示例
#!/bin/bash # 函数的使用场景二 dayin(){ echo "wo de mingzi shi $1" echo "wo de mingzi shi $2" echo "wo de mingzi shi $3" } dayin 111 df dfs