shell之讀取/etc/passwd中user及其id

題目:
寫一個腳本
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在語法規定中賦值等號兩邊是不允許有空格的,所以這兒犯了一個基礎錯誤。

發佈了41 篇原創文章 · 獲贊 18 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章