현재이 특정 bash 스크립트를 실행할 때 특정 사람에게 메뉴를 제공하는 스크립트를 작성하려고합니다. 메뉴에서 나는 세 가지 옵션 (1. 사용자 추가, 2. 사용자 삭제 및 3. 종료)을 허용했습니다. 사용자 추가 옵션과 관련하여 사용자가 새 사용자의 세부 정보를 수동으로 입력하거나 텍스트 파일을 통해 여러 사용자를 추가 할 수 있도록하는 두 가지 옵션이 있어야합니다. 내가/txt 파일을 통해 사용자를 삭제 수동으로 많은 사용자를위한 작업의 본문/본문을 만들 수 없습니다 비록 메뉴/옵션을 위에서 설명한대로 만들 수있었습니다.Bash Script 사용자를 추가, 삭제 하시겠습니까?
내 코드에 도움이된다면 도움이 될 것입니다. 고마워요!
#!/bin/bash
clear
echo "########## MENU ############\n"
options=("add_user" "delete_user" "exit")
select opt in "${options[@]}"
do
case $opt in
"add_user")
clear
while [ 1 ]
do
clear
echo "1. Add user manually"
echo "2. Add user via TXT file"
read -p "Enter your choice" ch
case $ch in
1)
read -p "Enter user name : " useradd
read -p "Enter user password:" passwd
echo -e "Successfully added the user"
;;
2)
if [ $(id -u) -eq 0 ]; then
for row in `more $1`
do
username=${row%:*}
password=${row#*:}
egrep "^$username" /etc/passwd >/dev/null
if [ $? -eq 0 ]; then
echo "$username exists!"
exit 1
else
pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
useradd -m -p $pass $username
[ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a
user!"
fi
done
else
echo "Only root may add a user to the system"
exit 2
fi
esac
done
;;
"delete_user")
read -p "Enter a User name to delete "UNAME
passwd
deluser $UNAME
echo "User $UNAME has been deleted"
;;
"exit")
break
;;
esac
done
많은 문제가 있습니다. 몇 가지 권고 사항 : 1) 개발/디버깅을위한 최선의 방법은 개발자가 루트가 아니라는 것입니다 (기본 로직이 작동하면 루트 체크 추가) 2.) 중첩 된'select's (추가 사용자 용)를 사용할 수 있습니다. 3.) 네이버 셀렉트 프롬프트에서 PS3를 설정하십시오, 4.) 오류 메세지를 깨끗이 지우십시오. 그래서 오류 메시지 이후에 스크립트를 사용하지 않거나 일시 정지 시키십시오. 5) 왜 'more'대신에? 'cat' 또는 while-read 루프로의 간단한 리다이렉션? 6) 마침내 가장 중요한 점은 스크립트를 bash-function으로 분해하여 관리 효율성을 높이는 것입니다. – jm666
답장을 보내 주셔서 감사합니다. 나는 당신이 멍청한 놈이라고 부를 때 당신이 의미하는 바를 전적으로 이해하지 못합니다. 괜찮으 시다면 개선 된 스크립트로 답장 해주십시오. 최대한 빨리. 의미심장합니다, 감사합니다. – user2265307