所以我正在做一個任務,我非常接近它。只是與最後一部分有問題。這是我想要的全部問題,只是讓你知道我正在嘗試做什麼 -Bash腳本幫助需要
編寫一個名爲make_uid的shell腳本,它給出一個包含用戶全名的文件來創建用戶登錄名。您的腳本需要閱讀newusers文件,併爲文件中的每個名稱創建一個登錄名,其中包含用戶名的第一個字符以及最多7個字符的姓。如果姓氏少於七個字符,請使用整個姓氏。如果用戶只有一個名稱,則使用提供的名稱(在newusers文件中)來生成一個長度爲8個字符的登錄名。注意:登錄名必須全部小寫!
創建登錄名後,您需要檢查passwd文件以確保您剛剛創建的登錄名不存在。如果名稱存在,請截掉您創建的名稱的最後一個字符,並添加一個數字(從1開始),然後再次檢查密碼文件。重複此過程直到您創建唯一的用戶登錄名。一旦你有一個唯一的用戶名,把它附加到密碼文件,並繼續處理新的用戶文件。
這是我的代碼到目前爲止。此時,它會生成一個包含所有登錄名的完整passwd文件。我只是在通過列表進行排序並相應地編輯重複項目的最後一步遇到問題。
#!/bin/bash
#Let's make some login names!
declare -a first
declare -a last
declare -a password
file=newusers
first=($(cat $file | cut -b1 | tr "[:upper:]" "[:lower:]" | tr '\n' ' '))
for ((i=0; i<${#first[@]}; i++)); do
echo ${first[i]} >> temp1
done
last=($(cat $file | awk '{print $NF}' $file | cut -b1-7 | tr "[:upper:]" "[:lower:]"))
for ((i=0; i<${#last[@]}; i++)); do
echo ${last[i]} >> temp2
done
paste -d "" temp1 temp2 >> passwd
sort -o passwd passwd
more passwd
rm temp1 temp2
旁白:儘量不要使用`cat`不必要的,因爲在這裏。你可以很容易地將`$ file`傳遞給``cut``和`awk`,而不需要另外添加一個程序到這個堆... :-) – BRFennPocock 2011-12-15 19:06:29
是的,而且...在最後的處理中,你需要$ cat文件然後awk .. $文件,所以你得到的數據是2x。另外,對於'編輯重複項'的問題,請嘗試`排序-u -o ...`'-u'以獲得唯一性或排序... | uniq ...是長期版本。祝你好運。 – shellter 2011-12-15 21:33:10