Linux的Shell練習--個人筆記
一、 實驗準備(預防抄襲,此步必做)
1. 請將提示符設為:學號加波浪號。輸入PS1=學號~,如PS1=110015~, 回車執行
2. 如發現提示符、學號不匹配, 視為抄襲或無效
二、 實驗專案
1. for迴圈控制命令
執行命令:
host www.****.edu.cn
可以得到它的ip地址: 222.175.157.209
假如現在我們要測試222.175.157.1到222.175.157.254這個範圍內哪些ip處於活躍狀態,那些處於非活躍狀態,需要重複ping這些ip地址。可以採用for迴圈,下面做個實驗:
執行命令
touch test41
開啟test41,輸入:
存檔退出,執行命令
chmod +x test41
輸入 ./test41 執行:
(下面貼上執行截圖Ê)
$ 這裡有幾點需要注意:
- 使用了輸出追加重定向操作>>
- alive=$(命令)的意思是命令替換,即把命令的執行結果儲存在變數alive中,因為預設情況下,命令的輸出是標準輸出,即螢幕,而不是變數。
- 關於命令替換,見教材207頁
-
命令wc –l alive.data統計檔案中的行數,但命令共輸出兩個域,通過cut –f1命令把第一個域截取出來。-d指定域之間的分隔符是空白,注意單引號之間要有一個空格
- 關於ping命令中-w 、-c選項的含義,參考man ping,請自學
- {1..254}是一個集合,意思是從1到254
執行命令
ls –lh | grep data
可以看到兩個檔案:
(下面貼上執行截圖Ê)
執行命令
cat alive.data not_alive.data | more
可以看到:
(下面貼上執行截圖Ê)
思考題
如果每次執行這個指令碼,檔案alive.data、 not_alive.data都儲存了上次執行的結果,這是不正確的。ping之前,需要把檔案alive.data、not_alive.data清空,應該在程式中如何處理?請重新改寫上面的指令碼,並測試你的程式。
(下面貼上你的程式,以及執行截圖Ê)提示:參考 man truncate
下面再做過一個批量生成空白檔案的實驗
執行命令 touch test42,在檔案test42中,鍵入:
然後鍵入bash test42, 可以看到
(下面貼上執行截圖Ê)
最後執行命令rm *.log 刪除這些臨時檔案
2. break語句
請同學們自己做,教材241頁,程式break01.sh
(下面貼上執行截圖Ê)
3. select迴圈
教材238頁,程式select01.sh
(下面貼上執行截圖Ê)
4. until迴圈控制
until的語法是
until condition
do
……
done
只要條件condition不滿足,就反覆迴圈,直到條件滿足為止
下面做個實驗,如果你有事要找root先生,那麼當root登陸後,立即響鈴一聲,並提示你
執行命令 touch test43, 在檔案test43中鍵入:
然後執行命令
chmod +x test43
./test43 root
接下來,按ctrl + alt + F2, 以root身份登陸。再按ctrl + alt + F7返回,
可以看到:
(下面貼上執行截圖Ê)
$ 這裡有幾點注意:
- 為了保持指令碼安靜執行,輸出被扔掉了
- $1就是第一個引數,也就是命令列傳進來的root
- \a的意思是讓鈴鐺alarm一聲
- sleep 50 的意思是暫停50秒,否則反覆測試會消耗CPU資源
5. while迴圈
教材235頁,程式while03.sh
(下面貼上執行截圖Ê)