함수에 대해 루프 실행

함수에 대해 루프 실행

관리자가 스크립트를 실행할 때 루프를 실행하려고 하는데 추가할 사용자 수를 묻는 메시지가 표시되고 관리자가 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



관련 정보