>
#!/bin/bash
echo "Type in your username in lowercase letters"
read user
#sudo adduser $user
echo "Are you a student or teacher?"
read group
if (("$group"=="teacher"));
then
        #sudo usermod -aG teachers
        echo "teacher"
elif (("$group"=="student"));
then
        #sudo usermod -aG students
        echo "students"
else
        echo "Sorry this group doesn't exist"
fi

사용자만들고에 자동으로 추가 할 수있는쉘 스크립트를 만들려고합니다.입력학생또는선생님이지만 위의 진술을 포함하고 싶습니다. 그러나'if'문으로 이동하여학생입력을 사용하는 경우 무시하기 때문에 작동하지 않는 것 같습니다.

<시간>

이 문제를 도와 주시겠습니까?

<시간>
  • 답변 # 1

    IMO case  if/elif/else/fi보다이 작업에 더 적합합니다. 예를 들면 다음과 같습니다.

    case "$group" in 
        teacher)  echo teacher ; sudo usermod -aG teachers ;;
        student)  echo student ; sudo usermod -aG students ;;
        *) echo "Sorry, this group doesn't exist" ; exit 1 ;;
    esac
    
    

    와일드 카드를 사용할 수 있습니다 :

       te*)  echo teacher ; sudo usermod -aG teachers ;;
        st*)  echo student ; sudo usermod -aG students ;;
    
    
    te 로 시작하는 모든 그룹과 일치하는

     또는 st .

    sudo 를 실행하는 대신 BTW  스크립트에서 여러 번 스크립트를 작성하는 것이 좋습니다. 스크립트를 먼저 작성하여 사용자로부터 입력을 얻은 다음 유효성 검사/위생 처리 한 다음 sudo 만 실행하십시오.  필요한 조치를 수행하십시오. 필요한 경우 명령 행에 전달 된 args를 기반으로 adduser 및 usermod 항목 만 수행하고 해당 스크립트 만 sudo에 의해 실행되도록하는 두 번째 스크립트를 작성하십시오.

    예 :

    #! /bin/sh
    read -p "Type in your username in lowercase letters: " user
    grep -q "^$user:" /etc/passwd && echo "Sorry, that user already exists" && exit 1
    read -p "Are you a student or teacher? " group
    [[ "$group" ~ student|teacher ]] || echo "Sorry, no such group" && exit 1
    sudo useradd "$user" -G "$group"
    
    

    그러나 sudo useradd user -G group 를 사용하여 명령 줄에서 모든 것을 할 수있을 때이 스크립트의 요점을보기가 어렵습니다.  프롬프트와 함께 시간을 낭비하지 않고 질문에 대답하지 않습니다.

  • 답변 # 2

    시도

    if [ "$group" = teacher ]
    
    

    마음

    우주 arround [  그리고 ]

    = (== 필요 없음)

    세미콜론 없음

    대신

    if (("$group"=="teacher"));
    
    

  • 답변 # 3

    bash에서 이것은 :

    if (("$group"=="teacher"));
    
    

    는 변수의 수치 테스트입니다. 변수는 숫자로 평가되며 텍스트 만 포함하면 0 로 평가됩니다. .

    bash의 텍스트에 대한 올바른 테스트는 다음과 같습니다 :

    if [[ $group == teacher ]];
    
    
    이 경우 따옴표가 필요하지 않으며 (항상 그런 것은 아님) == 를 사용할 수 있습니다  또는 =  ( [[ 내부와 동일합니다. ).

    POSIX 쉘의 경우 다음을 사용해야합니다 :

    if [ "$group" = "teacher" ];
    
    

    간단한 [ 를 사용해야합니다 변수를 인용하고 = 를 사용하십시오. .

관련 자료

  • 이전 search - HTML 파일에서 특정 URL을 추출하는 방법
  • 다음 linux - 주어진 디렉토리에서 파일의 비율을 임의로 선택