shell脚本–循环语句、函数和数组
一、循环语句
1.1for语句的结构
●读取不同的变量值,用来逐个执行同一组命令
●for循环:指定次数循环;遍历:把集合中的每个元素挨个读取一遍
结构一:遍历集合
for 变量名 in 取值列表
do
命令序列
done
结构二:指定次数
for ((i=1;i<=5;i++))
do
命令序列
done
1.2for语句应用实例
实例1:
批量添加用户
用户名存放在user.txt文件中,每行一个
初始密码均设为123123
[root@server1 ~]# sh user.sh
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建zhangsan成功
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建lisi成功
更改用户 wanger 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建wanger成功
更改用户 mazi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
创建mazi成功
[root@server1 ~]#
实例2:
根据IP地址检查主机状态
IP地址存放在ip.txt文件中,每行一个
使用ping命令检测各主机的连通性
[root@server1 ~]# sh ping.sh
PING 20.0.0.20 (20.0.0.20) 0(28) bytes of data.
8 bytes from 20.0.0.20: icmp_seq=1 ttl=64
8 bytes from 20.0.0.20: icmp_seq=2 ttl=64
8 bytes from 20.0.0.20: icmp_seq=3 ttl=64
--- 20.0.0.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
主机20.0.0.20存活
PING 20.0.0.30 (20.0.0.30) 0(28) bytes of data.
--- 20.0.0.30 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2002ms
主机20.0.0.30宕机
PING 20.0.0.40 (20.0.0.40) 0(28) bytes of data.
8 bytes from 20.0.0.40: icmp_seq=1 ttl=64
8 bytes from 20.0.0.40: icmp_seq=2 ttl=64
8 bytes from 20.0.0.40: icmp_seq=3 ttl=64
--- 20.0.0.40 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
主机20.0.0.40存活
PING 20.0.0.70 (20.0.0.70) 0(28) bytes of data.
--- 20.0.0.70 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2004ms
主机20.0.0.70宕机
1.3for语句中使用(( ))
使用以下符号需要先加let或者两个小括号((sum+=$i))
符号后面可以跟整数,也可以跟调用的变量
++ 自身变量加1 – 自身变量减1
+=5 自身变量加5 -=5 自身变量减5
*=5 自身变量乘5 /=5 自身变量除5
%=5 自身变量取余5
实例1:
在屏幕上输出1-10
1.4while语句的结构
重复测试某个条件,只要条件成立则反复执行
注意:
if条件成立只执行一次,而while成立了会反复执行,直到不成立
for可以先定义一个集合,再通过临时变量进行遍历
实例1:
批量创建5个用户:
用户名以stu开头,按数字进行编号,即st1、st2……
初始密码均为123123
实例2:
输出1-100不能被3整除的数
1.5双重循环
外层循环控制行;内层循环控制列
外层循环执行一次,内层循环执行一遍
打印一个直角三角形
echo -n ##不换行输出
echo -e ##支持加反斜线转义的字符(例如 \t 是水平制表符)
实例:
直角三角形