1. 程式人生 > >Linux的Shell練習--個人筆記

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

(下面貼上執行截圖Ê