SHELL脚本之for循环?
本文主要解答三个问题:
第一问:for循环大固定语法结构和工作原理是什么?
第二问:如何运用shell脚本中,for循环命令编写出一个测试172.25.0.0这个网段的所有IP地址是否能够通信?
第三问:如何运用shell脚本中,for循环命令创建好公司100人的系统帐号和密码?
第一问:
for循环大固定语法结构和工作原理是什么?
for循环大语法结构如下:
for 变量名 in 值列表
do
命令序列
done
举个栗子:有一天,你惹你家媳妇生气了,后果就是写10万遍“老婆大人,我错了”;
天呐!“老婆大人,我错了”,这句话加标点符号共计800万字。
肿麼办?这是要把手写残的节奏。
英雄,莫担心! for 循环来拯救你。
for i in seq 100000
do
echo 老婆大人,我错了 >> / luo.txt
done
2分钟,搞定。
因此,我们可以得出一个结论,for循环的工作原理就是通过指定一个变量,然后再从值列表中循环赋值,每次赋值后再执行同样大操作。
上述案例中:i 就是变量 ; seq 100000 就是值列表 ;
执行大命令就是: echo 老婆大人,我错了 >> / luo.txt
第二问:
如何运用for循环命令编写出一个测试172.25.0.0这个网段的所有IP地址是否能够通信?
1.vim / ping.sh
2.#!/bin/bash
3.x=0
4.y=0
5.for i in seq 254
6.do
7.ping -c 3 -i 0.2 - W 1 172.25.0.$i &> /dev/null
8.if [ $? -eq 0 ];then
9.echo "172.25.0.$i通了" >> /ok.txt
10.let x++
11.else
12.echo "172.25.0.$i不通" >> /no.txt
13.let x++
14.fi
15.done
16.echo "${x}台通了,${y}台不通"
译为:
1.##译为:运用vim文本编辑器工具创建一个名叫ping.sh的脚本文件;
2.##译为:shell脚本固定大格式;
3.4.##译为:为 x 和 y 这来两个变量名赋值都为 0 ;
5.##译为:对于 i 这个变量,从 seq 254 里面取值;
6.##译为:做以下操作
7.##译为:用ping命令测试172.25.0.0这个网段254台机器,每台机器ping 3次,每次0.2秒,不管成功还是失败反馈时间为1秒,并把结果丢到文件黑洞里面;
8.##译为:用 if 判断是否ping通,如果ping通了就运用echo 输出172.25.0.$i通了,并把结果追加重定向到ok.txt这个文件里面;
9.##译为:ping通了,则运用 let 运算工具给变量 x 加上 1 ;
10.##译为:如果没ping通了就运用echo 输出172.25.0.$i不通,并把结果追加到no.txt这个文件里面;
11.##译为:没ping通,就运用 let 运算工具给变量 y 加上 1 ;
12.##译为:结束,完成;
13.##译为:运用 echo 查看比变量 x 和 y 的值,看下总共有多少台机器是能够通信的,有多少台是不能通信的;
第三问:
如何运用shell脚本中,for循环命令创建好公司100人的系统帐号和密码?
公司人员名单表是:haha.txt
vim /user.sh
#!/bin/bash
for i in `cat haha.txt`
do
useradd $i
echo 用户 $ i 创建成功
echo 123456 | passwd --stdin $i &> /dev/null
echo 用户 $ i 密码设置成功
done
知识拓展:
{1..x} 指的是1...x个数
例如:mkdir /luo{1..10} 指的是:创建名为luo1—luo10的10个目录;
echo {1..100} 指的是:输出1.2.3.4.5.....100个数;
`seq 100...` 指的是输出1.2.3....100个数;
注意:需要加上` `反撇号;
``反撇号的作用就是提取里面的内容,然后参与前面命令大执行;用$()也能达到同样的效果;
以上......
祝:幸福!
罗贵
2019-03-07于深圳