題目:
寫一個腳本
1.設定變量FILE的值爲/etc/passwd
2.依次向/etc/passwd中的每個用戶問好,並且說出對方的ID是什麼
形如:(提示:LINE=wc -l /etc/passwd | cut -d" " -f1
)
Hello,root,your UID is 0.
3.統計一個有多少個用戶
剛開始想的是一行一行讀取文件,然後通過split函數分割數組的方式來輸出相應的數組值,但是寫完之後相當繁瑣,看了一下網上的答案之後,才明白linux的這些命令的方便與強大,比如說cut、head、tail、wc等等。如果運用上它們,將會使我們的代碼看上去更加簡潔明瞭。
下面是修改後的代碼。
#!/bin/bash
file="/etc/passwd"
line=`wc -l $file | cut -d" " -f1`
for I in `seq 1 $line`;do
userid=`head -$I $file |tail -1| cut -d: -f3`
username=`head -$I $file|tail -1 | cut -d: -f1`
echo "Hello,$username,your UID is $userid"
done
echo "there are $line users"
剛開始運行該腳本時,一直在這兩行出現錯誤,當時我是這樣寫的
userid = `head -$I $file |tail -1| cut -d: -f3`
username = `head -$I $file|tail -1 | cut -d: -f1`
大家可以通過對比上面正確的代碼看一下是什麼錯誤?
原來我在運用等號賦值上面出現的問題。此處我將等號兩邊都空了格。shell在語法規定中賦值等號兩邊是不允許有空格的,所以這兒犯了一個基礎錯誤。