我想学习 shell 脚本,需要你的帮助。
问题:我的脚本应该首先创建一个X目录,然后创建一个用户,如果该用户不存在,它会创建一个对所创建的X目录具有完全读写权限的用户。我不知道我的错误在哪里。
我的代码
#!/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