관리자가 스크립트를 실행할 때 루프를 실행하려고 하는데 추가할 사용자 수를 묻는 메시지가 표시되고 관리자가 2를 입력하면 사용자 이름과 비밀번호를 묻는 부분에서 루프를 실행하고 싶습니다. 예를 들어 관리자가 5를 입력하는 경우 사용자 이름과 비밀번호를 5번 묻습니다. 이것이 가능합니까? 알려주세요. 이것은 수업이고 스크립팅이 처음이라 무섭게 보일 수도 있습니다.
#!/bin/bash
read -r -p "Hello Titan, How many users would you like to add to the mainframe : " input
if [[ $input =~ ^[1-9]$ ]] ;
then
echo "Thank you Titan, Now Adding $input User(s) to the mainframe"
**if [[ $input == 1 ]] ; then
read -p "Enter Username : " username
read -p "Enter password : " username
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
else
echo "Can not add users"
fi**
else
echo "Amount of users invalid"
fi
답변1
반복하려는 코드를 함수로 옮기면 됩니다.
#!/bin/bash
add_user () {
if [[ $input == 1 ]] ; then
read -p "Enter Username : " username
read -p "Enter password : " username
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
else
echo "Can not add users"
fi
}
read -r -p "Hello Titan, How many users would you like to add to the mainframe : " input
if [[ $input =~ ^[1-9]$ ]] ; then
echo "Thank you Titan, Now Adding $input User(s) to the mainframe"
for((i=0;i<input;i++)); do
add_user
done
else
echo "Amount of users invalid"
fi
답변2
여러분의 도움으로 올바른 인코딩을 얻을 수 있었습니다. Hauke님, 감사합니다!
read -r -p "Hello Titan, How many users would you like to add to the mainframe : " input
if [[ $input =~ ^[1-9]$ ]] ; then
echo "Thank you Titan, Now Adding $input User(s) to the mainframe"
for ((i=0; i<input; i++)) ; do
read -p "Enter Username : " username
read -p "Enter password : " username
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 "Amount of users invalid"
fi