쉘 스크립팅을 배우고 싶습니다. 여러분의 도움이 필요합니다.
질문:내 스크립트는 먼저 내 실수가 어디에 있는지 모르겠습니다.
내 코드
#!/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