Bashスクリプトを書く必要があります
root
ユーザーとして実行していることを確認する- ユーザー名を尋ねる
- ユーザーが存在することを確認する
- 新しいユーザーとパスワードを追加
- グループ名を尋ねる
- グループが存在することを確認してください。
- グループにユーザーを追加
私はこのようなコードを書いた。
function create_user() {
if (( $EUID == 0)); then
echo "Only for root users."
exit
fi
echo "User name: "
read userschool
for x in $(awk -F":" '{ print }' /etc/passwd ); do
if [ $x == userschool ] ; then
echo "This user exists"
sleep $delay_time && exit
fi
done
sudo useradd -p $(openssl passwd -1 $PASS) $userschool
echo "User has been added"
sleep $delay_time
echo "Name of group"
read school
for x in $(awk -F":" '{ print }' /etc/group ); do
if [ $x == school ] ; then
echo "Group doesn't exists"
else
echo "$userschool has been added to group $school"
sleep $delay_time
break 2
fi
done
}
ほとんどうまくいきますが、ユーザーが存在する場合、スクリプトも彼を再追加する理由はわかりません。ユーザーが存在して停止するというメッセージを伝えたい。
ベストアンサー1
$x
変数ではなくリテラルと比較していますuserschool
。変数呼び出しを二重引用符で囲む必要があります。ワイルドカードと単語分割を防ぐ。それが必要です:
if [ "$x" == "$userschool" ]; then
...
fi
if [ "$x" == "$school" ]; then
...
fi
そして、/etc/passwd全体を繰り返し、1行ずつ比較する必要はありません。代わりに、以下を実行してください。
awk -F: -v user=$userschool '$1 == user {print $1}' /etc/passwd
-v
awkでは、変数の割り当てはどこにありますか?
すでに存在する場合は、指定したユーザー名を出力します。
# Since it's bash, you can do this instead
read -p "Username: " userschool
exists=$(awk -F: -v user=$userschool '$1 == user {print $1}' /etc/passwd)
if [[ "$exists" ]]; then
echo "User exists."
sleep $delay_time
exit 1
fi
# create user
...