シェルスクリプトを学びたいです。あなたの助けが必要です。
質問:私のスクリプトは、まず私の間違いがどこにあるのかわかりません。
私のコード
#!/bin/bash
echo "Please create a directory Name! "
read dn
cd
mkdir /home/$dn
ls /home
echo write the user Name!
read usrnm
if [ `sed -n "/^$usrnm/p" /etc/passwd` ]
then
echo "the user $usernm" exists already
else
useradd -M $usernm
chown -R $usernm /home/$dn
chmod -R u+rX /home/$dn
echo $usernm is being successfully created!
#cat /etc/group
fi
あなたのフレンドリーなフィードバックに心から感謝!
答え1
スクリプトには多くの問題があります。
行5 mkdir /home/$dn
- ユーザー入力にスペースが含まれていると奇妙なことが発生する可能性があるためmkdir "/home/$dn"
。
9号線、echo write the user Name!
良くありません。 「!」文字は bash で特別な意味を持つので、スクリプトではそのまま使用しません。今回も引用符を追加してください。echo 'write the user Name!'
10行目ではusrnm
それを読み、二重引用符なしで使用します。これは非常に悪いことで、16行目では次のようになります。その他変えるusernm
。
sedコマンドをより管理しやすく簡単なコマンドに置き換えました。
固定スクリプトは次のとおりです。
#!/bin/bash
echo "Please create a directory Name! "
read dn
cd
mkdir "/home/$dn"
ls /home
echo 'write the user Name!'
read usrnm
if grep -qw "$usrnm" /etc/passwd 2>/dev/null
then
echo "the user $usernm" exists already
else
useradd -M "$usrnm"
chown -R "$usrnm" "/home/$dn"
chmod -R u+rX "/home/$dn"
echo $usrnm is being successfully created!
fi