一、if介绍
如何写一个高可用性的脚本,赋予脚本智能化,赋予脚本执行逻辑。
比如nginx安装脚本中
- configure执行成功在执行make,
- make执行成功在执行make install
- 上一步错误就不需要执行后面的代码了。
answer: 加入判断
只要你想在代码中判断一下的时候就第一时间想到if就行了,适用于99%的语言。
当我们在写程序的时候,时常对上一步执行是否成功如何判断苦恼,当我们今天学习了if就可以解决你的苦恼。if语句在我们程序中就是用来做判断的,以后大家不管学习什么语言,以后只要涉及到判断的部分,大家就可以直接拿if来使用,不同的语言之间的if只是语法不同,原理是相同的。
二、单if语法
适用范围:只需要一步判断,条件返回真干什么。
语句格式
if [ condition ] #condition 值为true or false
then #条件为真的时候执行
commands #代码块 一行或者多行代码
fi #语句的结束
该语句翻译成汉语大意如下:
假如 条件为真
那么
执行commands代码块
结束
通过一段代码来演示一下吧,判断 当前用户是不是root,如果不是那么返回”ERROR: need to be root so that!“
#!/bin/bash
#Author: www.zuolaoshi.cn
#Created Time:
#Script Description:
if [ $USER != 'root' ]
then
echo "ERROR: need to be root so that"
exit 1
fi
三、if…else语句
适用范围==:两步判断,条件为真干什么,条件为假干什么。
if [ condition ]
then 条件为真
commands1 真 要执行代码块
else 条件为假
commands2 假 要执行的代码块
fi 结束
该语句翻译成汉语大意如下:
假如条件为真
那么
执行commands1代码块
否则
执行commands2代码块
结束
通过一段代码演示一下吧,判断当前登录用户是管理员还是普通用户,如果是管理员输出”hey admin“ 如果是普通用户输出”hey guest“
#!/bin/bash
#Author:www.zuolaoshi.cn
#Created Time:
#Script Description:
if [ $USER == 'root' ]
then
echo "hey admin"
else
echo "hey guest"
fi
四、if…elif…else
适用范围:多于两个以上的判断结果,也就是多于一个以上的判断条件。
if [ condition 1] 满足第一个条件
then 真
command1 执行command1代码块
elif [ condition 2] 满足第二个条件
then 真
commands2 执行command2代码块
.......
else 如果条件都不满足
commandsX 执行commandX代码块
fi 结束判断
该语句翻译成汉语大意如下:
假如 条件1 为真
那么
执行代码块1
假如 条件2 为真
那么
执行代码块2
以此类推的N个条件及对应的执行代码块
否则 【以上所有条件中没有一个满足的】
执行代码块X
结束
通过一段代码演示一下吧,通过一个脚本,判断两个整数的关系
案例需求 判断内存的使用率 60以下 ok 60以上 黄色警告 70以上 橙色严重警告 80以上 红色警告
案例思考
- 内存使用率获得方式 – 手动给出 – 通过内存查看命令运算得出
案例代码
#!/bin/bash
#1、条件
#判断内存的使用率
#60以下 ok 绿色 32m
#60以上 黄色警告 33m
#70以上 粉色严重警告 35m
#80以上 红色警告 31m
#2、算法
#收集内存使用率 $1
#
#多条件判断
if [ $1 -gt 80 ]
then
echo -e "\033[31m 警告 \033[0m"
elif [ $1 -gt 70 ]
then
echo -e "\033[35m 警告 \033[0m"
elif [ $1 -gt 60 ]
then
echo -e "\033[33m 警告 \033[0m"
else
echo -e "\033[32m OK \033[0m"
fi
#注意事项
#多条件判断 需要从最严格开始判断 否者 后面的就不会生效
#如果你第一个判断的是60以上,那么 70 80 都符合第一个条件。所以后面的判断70 80 就没有任何意义
五、练习案例
案例需求 比较两个整数的关系
案例思考
- 两个整数有几种关系 – 大于 – 等于 – 小于
案例代码
#!/bin/bash
#Author: www.zuolaoshi.cn
#Created Time:
#Script Description:
if [ $1 -gt $2 ]
then
echo "$1 > $2"
elif [ $1 -eq $2 ]
then
echo "$1 = $2"
else
echo "$1 < $2"
fi
六、if嵌套if
当有多步判断的时候,可以使用if嵌套
1、多步判断 类似于多条件if 2、依赖执行的环境 configure->make->make install
6.1、使用if嵌套if的方式判断两个整数的关系
#!/bin/bash
#Author:
#Created Time:
#Script Description:
if [ $1 -ne $2 ]
then
if [ $1 -gt $2 ]
then
echo " $1 > $2 "
else
echo " $1 < $2 "
fi
else
echo " $1 = $2 "
fi
6.2、写一个nginx安装初始化脚本
案例需求 写一个nginx业务初始化脚本,完成nginx软件自动安装。
案例思考
- 1、nginx软件包获得方式
- 2、nginx安装流程
- 3、nginx安装依赖关系
案例步骤
- 1、软件包下载
- 2、软件包解压
- 3、安装依赖包
- 4、安装nginx
- 5、返回结果
案例代码
#!/bin/bash
#Author: www.zuolaoshi.cn
#Created Time:
#Script Description: nginx aoto install script
source_pkg=nginx-1.19.2.tar.gz
#1、软件包下载
wget http://nginx.org/download/$source_pkg
#2、解压
if [ -f $source_pkg ];then
tar xf $source_pkg && cd nginx-1.19.2
else
echo "not found $source_pkg"
exit 1
fi
#3、安装依赖包
if ! ( yum -y install pcre-devel zlib-devel );then
echo "yum: install soft error"
exit 1
fi
#4、配置
#判断配置语句执行结果
if ./configure 1>/dev/null
then
#判断make执行结果
if make 1>/dev/null
then
#判断make install安装结果
if make install 1>/dev/null
then
echo "nginx 安装成功"
else
echo "nginx 安装失败"
exit 1
fi
else
echo "make fail"
exit 1
fi
else
echo "configure fail"
exit 1
fi
#./configure
#if [ $? -eq 0 ];then
#注意: 1>/dev/null
1 标准输出
2 标准错误输出
七、if高级用法
7.1、条件符号使用双圆括号,可以在条件中植入数学表达式 if (())
#!/bin/bash
#Author:
#Created Time:
#Script Description:
if (( (5+5-5)*5/5 > 10 ))
then
echo "yes"
else
echo "no"
fi
7.2、使用双方括号,可以在条件中使用通配符
通过代码看下 ,为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串
#!/bin/bash
#Author:
#Created Time:
#Script Description:
for var in ab ac rx bx rvv vt
do
if [[ "$var" == r* ]]
then
echo "$var"
fi
done
八、简写if
省去了关键字,条件为真采用&&符号链接命令块,条件为假采用||链接命令块
简写if一般用在简单的判断中
if [ ! -d /tmp/baism ]
then
mkdir /tmp/baism
fi
可以简写为
[ ! -d /tmp/baism ] && mkdir /tmp/baism
if [ $USER == 'root' ]
then
echo "hello root"
else
echo "hello guest"
fi
可以简写
[ $USER == 'root' ]&&echo "hello root" || echo "hello guest"
九、课后练习
1、计算机状态监控。能ping通就算up,不通为down,需要考虑网络延迟问题造成的假报警问题。
#1、分别ping 取三个值 判断三个值的结果
1.1 ping 3次 并取值
1.2 三次结果与运算 得出结论
2、监控一个服务端口,判断其状态
3、打印内存使用率脚本,打印内存使用率、swap使用率、buff&cache使用量
4、打印磁盘使用率脚本,对本机的磁盘使用率统计并打印结果
使用率小于80,绿色输出
使用率小于90,大于80,黄色输出
使用率小于95,大于90,红色输出
5、网卡发送和就收数据量监控,按秒统计。
6、URL监控脚本,对某个URL进行监控,返回值为200则代表成功访问。
7、写一个mysql binlog备份脚本,要求每天0点0分,计算机自动备份前一天的binlog日志,打包后发送给备份服务器。
8、闰年判断
9、判断/tmp/run目录是否存在,如果不存在就建立,如果存在就删除目录里所有文件
10、写一个nginx安装脚本
工作中总是有很多工作需要重复性来完成,比如每天都需要执行一次备份、每天都需要分析一次业务的access.log日志,每分钟都需要监测一次主机的状态等等工作,这些重复性的工作我们一般都是使用脚本来完成,对于不需要频繁执行的任务,可以结合计划任务➕脚本完成,但是系统的计划任务只能精确到分,不能满足更频繁的重复工作。
这个时候我们除了依赖计划任务之外还有很多选择,比如脚本中的循环语句。
循环的优点
- 1)节省内存 10M脚本 1M脚本 哪个更剩内存 完成同一个任务
- 2)结构更清晰
- 3)节省开发时间成本
一、if高级用法
1.1、条件符号使用双圆括号,可以在条件中植入数学表达式 if (())
#!/bin/bash
#Author: www.zuolaoshi.cn
#Created Time:
#Script Description:
if (( (5+5-5)*5/5 > 10 ))
then
echo "yes"
else
echo "no"
fi
1.2、使用双方括号,可以在条件中使用通配符
通过代码看下 ,为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串
#!/bin/bash
#Author: www.zuolaoshi.cn
#Created Time:
#Script Description:
for var in ab ac rx bx rvv vt
do
if [[ "$var" == r* ]]
then
echo "$var"
fi
done
二、简写if
省去了关键字,条件为真采用&&符号链接命令块,条件为假采用||链接命令块
简写if一般用在简单的判断中
if [ ! -d /tmp/baism ]
then
mkdir /tmp/baism
fi
可以简写为
[ ! -d /tmp/baism ] && mkdir /tmp/baism
if [ $USER == 'root' ]
then
echo "hello root"
else
echo "hello guest"
fi
可以简写
[ $USER == 'root' ]&&echo "hello root" || echo "hello guest"
一、条件循环语句-case
在生产环境中,我们总会遇到一个问题需要根据不同的状况来执行不同的预案,那么我们要处理这样的问题就要首先根据可能出现的情况写出对应预案,根据出现的情况来加载不同的预案。
1.1、case介绍
特点:根据给予的不同条件执行不同的代码块
比如你去相亲:你会在脑子里出现以下的预案:
第一眼看到对方父亲,你应该说:伯父好
第一眼看到对方母亲,你应该说:伯母好
第一眼看到对方奶奶,你应该说:奶奶好
。。。。
而这个例子中触发就是你第一眼看到了对方的谁,预案则是叫什么称呼。
再来说一个计算机的相关例子---监控内存使用率
内存使用率低于80%,脚本输出: 绿色字体的Memory use xx%
内存使用率大于80%小于90%,脚本输出: 黄色字体的Memory use xx%
内存使用大于90%,脚本输出: 红色字体的Memory use xx%
1.2、case语法
case $var in 定义变量;var代表是变量名
pattern 1) 模式1;用 | 分割多个模式,相当于or
command1 需要执行的语句
;; 两个分号代表命令结束
pattern 2)
command2
;;
pattern 3)
command3
;;
*) default,不满足以上模式,默认执行*)下面的语句
command4
;;
esac esac表示case语句结束
二、案例
案例需求 写一个nginx启动管理脚本,可以实现/etc/init.d/nginx start|stop|restart|status|reload 或者 systemctl start nginx
#!/bin/bash
#Description:
#Author: www.zuolaoshi.cn
#Created Time:
#nginx service manage script
#variables
nginx_install_doc=/usr/local/nginx
proc=nginx
nginxd=$nginx_install_doc/sbin/nginx
pid_file=$nginx_install_doc/logs/nginx.pid
# Source function library.
if [ -f /etc/init.d/functions ];then
. /etc/init.d/functions
else
echo "not found file /etc/init.d/functions"
exit
fi
#假如pid文件存在,那么统计一下nginx进程数量
if [ -f $pid_file ];then
nginx_process_id=`cat $pid_file`
nginx_process_num=`ps aux |grep $nginx_process_id|grep -v "grep"|wc -l`
fi
#function
start () {
#如果nginx 没有启动直接启动,否则报错 已经启动
if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
echo "nginx running..."
else
#如果pid文件存在,但是没有进程,说明上一次非法关闭了nginx,造成pid文件没有自动删除,所以启动nginx之前先删除旧的pid文件
if [ -f $pid_file ] && [ $nginx_process_num -lt 1 ];then
rm -f $pig_file
#可以使用两个函数,两种方法来执行命令,并返回执行结果
#1)daemon
#2)action 建议这个,简单易用
#echo " nginx start `daemon $nginxd` "
action "nginx start" $nginxd
fi
#echo " nginx start `daemon $nginxd` "
action "nginx start" $nginxd
fi
}
stop () {
#判断nginx启动的情况下才会执行关闭,如果没启动直接报错,或者提示用户服务没启动,这里我直接报错的原因是为了给大家演示失败的输出
if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
action "nginx stop" killall -s QUIT $proc
rm -f $pid_file
else
action "nginx stop" killall -s QUIT $proc 2>/dev/null
fi
}
restart () {
stop
sleep 1
start
}
reload () {
#重载的目的是让主进程重新加载配置文件,但是前提是服务必须开启
#这里先判断服务是否开启,开启就执行加载,没有开启直接报加载错误
if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
action "nginx reload" killall -s HUP $proc
else
action "nginx reload" killall -s HUP $proc 2>/dev/null
fi
}
status () {
if [ -f $pid_file ]&&[ $nginx_process_num -ge 1 ];then
echo "nginx running..."
else
echo "nginx stop"
fi
}
#callable
case $1 in
start) start;;
stop) stop;;
restart) restart;;
reload) reload;;
status) status;;
*) echo "USAGE: $0 start|stop|restart|reload|status";;
esac
一、循环语句-for
1.1、for介绍
脚本在执行任务的时候,总会遇到需要循环执行的时候,比如说我们需要脚本每隔五分钟执行一次ping的操作,除了计划任务,我们还可以使用脚本来完成,那么我们就用到了循环语句。
1.2、for基本语法 for条件循环
- 列表for循环:用于将一组命令执行已知的次数,下面给出了for循环语句的基本格式:
for variable_name in {list}
do
command
command
…
done
或者
for variable in a b c
do
command
command
done
1.3、for条件应用
for条件不同的赋值方式 a、赋值来自一个范围
for var in {1..10}
do
echo $var
done
b、直接赋值
for var in 1 2 3 4 5
do
echo $var
done
c、赋值来自命令
for var in `seq 10`
do
echo $var
done
体验不同的方式
赋值来自一个范围
for var in $(seq 10)
do
echo $var
done
for var in {0..10..2}
do
echo $var
done
for var in {10..1}
do
echo $var
done
for var in {10..1..-2}
do
echo $var
done
for var in `seq 10 -2 1`
do
echo $var
done
- 不带列表循环
不带列表的for循环执行时由用户指定参数和参数的个数,下面给出了不带列表的for循环的基本格式:
for variable
do
command
command
…
done
语法结构举例说明:
#!/bin/bash
for var
do
echo $var
done
echo "脚本后面有$#个参数"
1.4、for C格式语法
- 类C风格的for循环
for(( expr1;expr2;expr3 ))
do
command
command
…
done
for (( i=1;i<=5;i++))
do
echo $i
done
expr1:定义变量并赋初值 变量初始值
expr2:决定是否进行循环(条件) 变量的条件
expr3:决定循环变量如何改变,决定循环什么时候退出 自增或自减运算
多变量用法
for ((A=1,B=10;A<10,B>1;A++,B--))
语法结构举例说明:
for ((i=1;i<=5;i++));do echo $i;done
for ((i=1;i<=10;i+=2));do echo $i;done
for ((i=2;i<=10;i+=2));do echo $i;done
二、练习案例
jobs: 写一个扫描软件,扫描本地网络中存活的机器
案例需求: 判断本地网络中哪些IP被使用
案例分析: 采用ping的方式判断IP是否被占用
a、能ping通说明占用
b、不能ping通说明未被占用
b、命令
ping -c1 IP
算法: 1、ping ip 2、分析ping结果 3、输出结果
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description: 扫描本地网络中存活的主机,以C类地址为例
#variables
netsub="192.168.1."
#main
#1、循环ping IP地址,能ping通说明IP存在。
for ip in `seq 1 254`
do
(
#2、判断Ping结果
if ping -c1 $netsub$ip &>/dev/null;then
#3、输出结果
echo "$netsub$ip is open"
else
echo "$netsub$ip is close"
fi
) &
done
一、for嵌套
1.1、for嵌套if
案例: 输出1-9,当输出5时停止输出
案例代码
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description:输出1-9,当输出5时停止输出
for ((num=1;num<10;num++))
do
echo $num
[ $num -eq 5 ]&& break
done
1.2、for嵌套for 案例: 打印99乘法表
案例代码
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description:
#打印99乘法表,思考A*B的关系
for ((A=1;A<=9;A++))
do
for ((B=1;B<=$A;B++))
do
echo -n -e "$B*$A=$((A*B)) \t"
done
#换行
echo
done
二、for与数组
for循环与数组
2.1、使用for循环遍历读出数组
name=('tom' 'jarry' 'harry' 'barry')
for i in 0 1 2 3
do
echo ${name[$i]}
done
2.2、使用for循环进行数组存值
for i in `seq 0 9`
do
read -p "name: " name[$i]
done
echo ${name[@]}
while在shell中也是负责循环的语句,和for一样。因为功能一样,很多人在学习和工作中的脚本遇到循环到底该使用for还是while呢?很多人不知道,就造就了有人一遇到循环就是for或者一位的while。我个人认为可以按照我说的这个思想来使用,既知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。所以这样的循环我就建议大家用while了。
一、while介绍
特点:条件为真就进入循环;条件为假就退出循环,一般应用在未知循环次数的环境。
1.1、while语法
while [ 表达式 ]
do
command...
done
while [ 1 -eq 1 ] 或者 (( 1 > 2 ))
do
command
command
...
done
案例 使用for循环和while循环分别循环打印数组1-5
案例代码
for循环打印:
for ((i=1;i<=5;i++))
do
echo $i
done
while循环打印:
#打印数字1-5
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description: 打印1-5
num=1
while [ $num -le 5 ]
do
echo $num
let num++
done
备注: 知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。
二、while与shell运算
2.1、比较运算
案例: 循环交互输入一个小写字母,按Q退出循环
案例代码
#按Q退出场景
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description:
read -p "请输入一个小写字母,按Q退出: " choose
while [ $choose != 'Q' ]
do
echo "你输入的是: $choose"
read -p "请输入一个小写字母,按Q退出: " choose
done
2.2、逻辑运算
案例: 使用循环语句帮助丈母娘批量选择女婿
案例代码
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description:
#丈母娘选女婿 分别按照姑娘20 30 40 进行与或非模拟
#1.第一个应征者回答
read -p "你有多少钱: " money
read -p "你有多少车: " car
read -p "你家房子有几套: " house
#while [ $money -lt 10000 ]&&[ $car -lt 1 ]&&[ $house -lt 2 ]
while [ $money -lt 10000 ]||[ $car -lt 1 ]||[ $house -lt 2 ]
do
#应征者不满住条件开始下一次循环
echo "有请下一个"
read -p "你有多少钱: " money
read -p "你有多少车: " car
read -p "你家房子有几套: " house
done
#应征者满足条件
echo "乖女婿,你怎么才来啊!女儿给你了"
2.3、文件类型判断
案例: 使用循环判断/tmp/xxx目录下的文件,如果不是文件类型的打印字符串"目录"
案例代码
文件类型判断
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description:
while [ ! -f /tmp/xxx ]
do
echo “目录”
sleep 1
done
2.4、特殊条件
while语句中可以使用特殊条件来进行循环:
- 符号":" 条件代表真,适用与无限循环
- 字符串 “true” 条件代表真,适用与无限循环
- 字符串 "false"条件代表假
代码展示
特殊符号 : 代表真
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description:
while :
do
echo haha
sleep 1
done
true 字符串代表真,和:类似
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description:
while true
do
echo haha
sleep 1
done
false 字符串代表假,在while中不会开始循环
三、while与循环控制语句
3.1、sleep语句
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description: 倒计时游戏
#1.定义初始值
time=9
#2.循环输出,1秒一次
while [ $time -ge 0 ]
do
echo -n -e "\b$time"
let time--
#控制循环 1秒一次
sleep 1
done
#回车
echo
3.2、break
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description: 输出数字1-9,当输出5时停止
#1、定义初始值
num=1
while [ $num -lt 10 ]
do
echo $num
#判断当前num的值,如果等于5就跳出循环
if [ $num -eq 5 ]
then
break
fi
#自动累加
let num++
done
3.3、continue
#!/bin/bash
#
#Author:
#Created Time:
#Release:
#Description: 输出数字1-9,当等于5时跳过本次循环,输出1、2、3、4、6、7、8、9
#1、定义初始值
num=0
while [ $num -lt 9 ]
do
#自动累加
let num++
#判断当前num的值,如果等于5就跳过本次循环
if [ $num -eq 5 ]
then
continue
fi
#输出num的值
echo $num
done
四、while嵌套其他语句
4.1、while嵌套if
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description: 输出数字1-9,当输出5时停止
#1、定义初始值
num=1
while [ $num -lt 10 ]
do
echo $num
#判断当前num的值,如果等于5就跳出循环
if [ $num -eq 5 ]
then
break
fi
#自动累加
let num++
done
4.2、while嵌套for
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description: 99乘法表
A=1
while [ $A -lt 10 ]
do
for ((B=1;B<=$A;B++))
do
echo -n -e "$B*$A=$((A*B)) \t"
done
echo
let A++
done
4.3、while嵌套while
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description: 99乘法表
#定义A
A=1
while [ $A -lt 10 ]
do
#定义B
B=1
while [ $B -le $A ]
do
echo -n -e "$B*$A=$((A*B)) \t"
let B++
done
echo
let A++
done
一、循环语句-until
系统中还有一个类似while的循环语句,大家可以看看until语句,不同于while的是,当条件为假时开始until循环。
1.1、until介绍
特点:条件为假就进入循环;条件为真就退出循环
1.2、until语法
until expression [ 1 -eq 1 ] (( 1 >= 1 ))
do
command
command
...
done
二、案例:
使用while循环和until循环打印数字接龙,要求while循环输出1-5,until循环输出6-9.
案例代码
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description: 数字接龙
i=1
while [ $i -le 5 ]
do
echo $i
let i++
until [ $i -le 5 ]
do
echo $i
let i++
[ $i -eq 10 ]&&break
done
done
一、循环控制-break语句
作用: 终止循环,执行循环体后面的代码 案例: 循环打印输出数字1到9,当执行输出到5时终止循环。
要求输出:
1
2
3
4
执行完毕
案例代码
#!/bin/bash
#Author: www.zuolaoshi.cn
#Created Time:
#Script Description:
for i in `seq 1 9`
do
echo $i
if [ $i -eq 5 ]
then
break
fi
done
echo "执行完毕"
二、循环控制-continue语句
作用: 跳过某次循环,继续执行下一次循环;表示循环体内下面的代码不执行,重新开始下一次循环
案例: 循环打印输出数字1到9,当执行输出到5时跳过本次循环。
要求输出:
1
2
3
4
6
7
8
9
执行完毕
案例代码
#!/bin/bash
#Author: www.zuolaoshi.cn
#Created Time:
#Script Description:
for ((i=1;i<10;i++))
do
if [ $i -eq 5 ]
then
continue
else
echo $i
fi
done
echo "执行完毕"
三、循环控制-sleep
作用: 控制循环的节奏,控制循环频率 当执行一个无限循环语句的时候,如果任意其循环那么该循环就会疯狂的消耗计算机的内存和CPU资源,消耗最大的就是CPU,所以一个循环不可能让其肆意循环,必须控制其循环的节奏,可以使用sleep语句来完成。
案例: 写一个倒计时程序:从9到1,每秒倒数一次。
案例代码
#!/bin/bash
#Author:
#Created Time:
#Script Description:
echo -n "倒计时: "
for i in `seq 9 -1 1`
do
echo -n -e "\b$i"
sleep 1
done
echo
echo "执行完毕"
四、参数控制命令-shift
作用: 外部传参到循环时,参数管理命令 使位置参数向左移动,默认移动1位,可以使用shift 2 传参要是N的整数倍
案例: 通过外部传参的方式向脚本内的循环传递参数,要求打印每次循环使用的参数。
案例代码
#!/bin/bash
#
#Author: www.zuolaoshi.cn
#Created Time:
#Release:
#Description:
#1、判断外传参的数量
[ $# -lt 3 ]&&echo '请输入至少三个参数:'$0' $1 $2 $3 ...'&&exit 1
#将参数的数量赋值给count
count=$#
#通过shift左移参数输出
#使位置参数向左移动,默认移动1位,可以使用shift 2 传参要是N的整数倍
for ((i=1;i<=$count;i++))
do
echo '参数数量: '$#''
echo '当前$1的数值是: '$1''
shift 1
sleep 1
done
echo "执行完毕"
五、脚本退出命令-exit
作用: 退出程序并释放占用的系统资源
案例: 循环输出数字1-9,当循环到5时退出脚本。
案例代码
#!/bin/bash
#Author: www.zuolaoshi.cn
#Created Time:
#Script Description:
for i in `seq 1 9`
do
echo $i
if [ $i -eq 5 ]
then
exit 0
fi
done
echo "执行完毕"
六、作业
break 和 exit语句的区别