
本文主要解答三個問題:
第一問:for循環(huán)大固定語法結構和工作原理是什么?
第二問:如何運用shell腳本中,for循環(huán)命令編寫出一個測試172.25.0.0這個網(wǎng)段的所有IP地址是否能夠通信?
第三問:如何運用shell腳本中,for循環(huán)命令創(chuàng)建好公司100人的系統(tǒng)帳號和密碼?
第一問:
for循環(huán)大固定語法結構和工作原理是什么?
for循環(huán)大語法結構如下:
for ? ?變量名 ? ?in ? ? ? ?值列表
do
命令序列
done
舉個栗子:有一天,你惹你家媳婦生氣了,后果就是寫10萬遍“老婆大人,我錯了”;
天吶!“老婆大人,我錯了”,這句話加標點符號共計800萬字。
腫麼辦?這是要把手寫殘的節(jié)奏。
英雄,莫擔心! for 循環(huán)來拯救你。
for ? ?i ? ?in ? ? seq ?100000
do
echo ? ?老婆大人,我錯了 ? ?>> ? ?/ luo.txt
done
2分鐘,搞定。
因此,我們可以得出一個結論,for循環(huán)的工作原理就是通過指定一個變量,然后再從值列表中循環(huán)賦值,每次賦值后再執(zhí)行同樣大操作。
上述案例中:i ? ?就是變量 ? ? ; ? ?seq ? 100000 ?就是值列表 ? ? ; ? ?
執(zhí)行大命令就是: ?echo 老婆大人,我錯了 >> / luo.txt
第二問:
如何運用for循環(huán)命令編寫出一個測試172.25.0.0這個網(wǎng)段的所有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文本編輯器工具創(chuàng)建一個名叫ping.sh的腳本文件;
2.##譯為:shell腳本固定大格式;
3.4.##譯為:為 x 和 y ?這來兩個變量名賦值都為 0 ;
5.##譯為:對于 i 這個變量,從 seq 254 里面取值;
6.##譯為:做以下操作
7.##譯為:用ping命令測試172.25.0.0這個網(wǎng)段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循環(huán)命令創(chuàng)建好公司100人的系統(tǒng)帳號和密碼?
公司人員名單表是:haha.txt
vim ? ?/user.sh
#!/bin/bash
for ? i ? in ? `cat ? haha.txt`
do
useradd ? ? $i
echo ? ? ?用戶 $ i 創(chuàng)建成功
echo ? 123456 ? ?| ? ?passwd ? --stdin ? ?$i ? ? ? ? ? ?&> ? ?/dev/null
echo ? ? ?用戶 $ i 密碼設置成功
done
知識拓展:
{1..x} ? ? ? ?????????指的是1...x個數(shù)
例如:mkdir ? ?/luo{1..10} ? 指的是:創(chuàng)建名為luo1—luo10的10個目錄;
? ? ? ? ? ? ?echo ? {1..100} ? ?????指的是:輸出1.2.3.4.5.....100個數(shù);
`seq ? 100...` ? ?指的是輸出1.2.3....100個數(shù);
注意:需要加上` `反撇號;
``反撇號的作用就是提取里面的內容,然后參與前面命令大執(zhí)行;用$()也能達到同樣的效果;
以上......
祝:幸福!
羅貴
2019-03-07于深圳