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 ]

脚本内容
admin-1@ubuntu:/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 ( l s / r o o t ) d o e c h o " (ls /root) do echo " (ls/root)doecho"{i}"
done

4.1.6 while循环语句
语法格式
while 条件
do
执行语句
done
注意:
条件的类型:
命令、[[ 字符串表达式 ]]、(( 数字表达式 ))

场景:
只要条件满足,就一直循环下去

while语句示例
脚本内容
#!/bin/bash

while的示例

a=1
while [ “ a " − l t 5 ] d o e c h o " {a}" -lt 5 ] do echo " a"lt5]doecho"{a}”
a=$((a+1))
done

4.1.7 until循环语句
语法格式
until 条件
do
执行语句
done
注意:
条件的类型:
命令、[[ 字符串表达式 ]]、(( 数字表达式 ))

场景:
只要条件不满足,就一直循环下去

until语句示例
脚本内容
#!/bin/bash

until的示例

a=1
until [ “ a " − e q 5 ] d o e c h o " {a}" -eq 5 ] do echo " a"eq5]doecho"{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

4.3 第一阶段综合案例
需求
1、zonghe.sh 脚本执行时候需要添加参数才能执行
参数和功能详情如下:
参数 执行效果
start 服务启动中…
stop 服务关闭中…
restart 服务重启中…
* 脚本帮助信息…
2、参数的数量有限制,只能是1个,多余一个会提示脚本的帮助信息
3、帮助信息使用函数来实现
信息内容:脚本 zonghe.sh 使用方式 zonghe.sh [ start|stop|restart ]
知识点分析:
1、zonghe.sh 脚本执行时候需要添加参数才能执行
脚本传参、case语句
2、参数的数量有限制,只能是1个,多余一个会提示脚本的帮助信息
参数数量、条件表达式(验证+数字)、if语句
3、帮助信息使用函数来实现
函数定义+调用
4、if语句和case语句嵌套
if语句在外,case语句在内
脚本编写流程:
1、先写主流程框架
2、完善函数功能
3、完善需求功能
代码实践
#!/bin/bash

定义本地变量

arg="$1"

脚本帮助信息

usage(){
echo “脚本 $0 的使用方式是: $0 [ start|stop|restart ]”
}

函数主框架

if [ KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ -eq 1 ] then …{arg}" in
start)
echo “服务启动中…”
;;
stop)
echo “服务关闭中…”
;;
restart)
echo “服务重启中…”
;;
*)
usage
;;
esac
else
usage
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值