私は課題に取り組んでおり、手に入れようとしています。最後の部分に問題があるだけです。Bashスクリプトのヘルプが必要
make_uidという名前のシェルスクリプトを作成して、ユーザーのフルネームを含むファイルを指定してユーザーのログイン名を作成します。スクリプトはnewusersファイルを読み取る必要があります。ファイル内の各名前について、ユーザーのファーストネームの最初の文字と姓の7文字までのログイン名を作成します。姓が7文字未満の場合は、姓の全体を使用します。ユーザーが1つの名前しか持っていない場合は、newusersファイル内の名前として提供されているものを使用して、8文字のログイン名を生成します。注意:ログイン名はすべて小文字にする必要があります。
ログイン名を作成したら、作成したログイン名が存在しないことを確認するためにpasswdファイルをチェックする必要があります。名前が存在する場合は、作成した名前の最後の文字を切り捨て、数字(1から始まる)を追加して、再度passwdファイルを確認します。一意のユーザーログイン名を作成するまで、このプロセスを繰り返します。一意のユーザー名を取得したら、それをpasswdファイルに追加して、newusersファイルの処理を続行します。
これまでのコードです。この時点で、すべてのログイン名で完全な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
はい、...最後の処理では、$ fileとawk .. $ fileになっているので、データは2倍になります。また、 'duplicateの編集 'に関する問題については' sort -u -o ... 'を試してください。' -u'は一意であるか、 'sort ... | uniq ...'は長針です。がんばろう。 – shellter