Linux云计算集群架构师
第二十二章跳出循环-shift参数左移-函数的使用
本节所讲内容:
22.1跳出循环
22.2Shift参数左移指令
22.3函数的使用
22.4实战-自动备份mysql数据库和nginx服务启动脚本
22.1跳出循环break和continue
在我们使用循环语句进行循环的过程中,有时候需要在未达到循环结束条件时强制跳出循环,那么Shell给我们提供了两个命令来实现该功能:break和continue
Break:跳出整个循环
Continue:跳过本次循环,进行下次循环
break概述:跳出当前整个循环或结束当前循环,在for、while等循环语句中,用于跳出当前所在的循环体,执行循环体之后的语句,后面如果什么也不加,表示跳出当前循环等价于break1,也可以在后面加数字,假设break3表示跳出第三层循环
continue概述:忽略本次循环剩余的代码,直接进行下一次循环;在for、while等循环语句中,用于跳出当前所在的循环体,执行循环体之后的语句
例1:写一个shell菜单,当按数字键4时退出,否则一直循环显示
[root
xuegod63~]#vimbreak-continue.sh#!/bin/sh
whiletrue
do
echo"*******************************"
echo"Pleaseselectyouroperation:"
echo"1Copy"
echo"2Delete"
echo"3Backup"
echo"4Quit"
echo"*******************************"
readop
case$opin
1)
continue#这里加了continue后,忽略本次循环剩余代码,后面内容都不执行了,直接进行下次一次循环
echo"yourselectionisCopy"
;;
2)
echo"yourselectionisDelete"
;;
3)
echo"yourselectionisBackup"
;;
4)
echo"yourselectionisExit"
break#跳出循环体
;;
*)
echo"invalidselection,pleasetryagain"
esac
done
例2:使用交互式方法批量添加用户
[root
bogonsh]#vimuseradd.sh#!/bin/bash
echo"*********************"
read-p"请输入要创建的用户名:"name
read-p"请输入要创建的用户数:"num
read-p"请输入要创建用户密码:"pas
echo"*********************"
for((i=1;i=$num;i=i+1))
do
useradd$name$i/dev/null
echo"$pas"
passwd--stdin$name$i/dev/null
done
echo"创建用户完成,结果是..."
tail-$num/etc/passwd
vimuserdel.sh
#!/bin/bash
echo"******************"
read-p"请输入要删除的用户名:"name
read-p"请输入要删除的用户数:"num
echo"******************"
for((i=1;i=$num;i++))
do
if[$i-eq4];then
continue
#break
else
userdel-r$name$i/dev/null
fi
done
echo"删除用户完成,结果是..."
tail-$num/etc/passwd
[root
xuegod63~]#vimbreak1.sh#!/bin/bash
while:
do
echo-n"输入1到5之间的数字:"
readaNum
case$aNumin
1
2
3
4
5)echo"你输入的数字为$aNum!"
;;
*)echo"你输入的数字不是1到5之间的!游戏结束"
break
;;
esac
done
[root
xuegod63~]#vimcontinue1.sh#!/bin/bash
while:
do
echo-n"输入1到5之间的数字:"
readaNum
case$aNumin
1
2
3
4
5)echo"你输入的数字为$aNum!"
;;
*)echo"你输入的数字不是1到5之间的!"
continue
echo"游戏结束"
;;
esac
done
运行代码发现,当输入大于5的数字时,会执行continue忽略本次循环,执行下一次循环,语句echo"游戏结束"永远不会被执行
22.2Shift参数左移指令
shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux中各种程序的启动脚本)
在扫描处理脚本程序的参数时,经常要用到的shift命令,如果你的脚本需要10个或10个以上的参数,你就需要用shift命令来访问第10个及其后面的参数
作用:每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参数,移出去的参数,不再可用
例子:加法计算器
[root
xuegod63~]#vimshift.sh#!/bin/bash
if[$#-le0];then
echo"没有足够的参数"
exit
fi
sum=0
while[$#-gt0]
do
sum=$((sum+$1))
shift
#shift2
done
echo"结果是"$sum
测试:
[root
xuegod63~]#bashshift.shresultis20
使用shift2
shshift.sh
resultis16
22.3函数的使用
函数是一个脚本代码块,你可以对它进行自定义命名,并且可以在脚本中任意位置使用这个函数,要使用这个函数,只要使用这个函数名称就可以了。使用函数的好处:模块化,代码可读性强。
22.3.1函数创建语法
方法1:
functionname{