if, elif 및 else 쉘 스크립트 Linux 명령문

if, elif 및 else 쉘 스크립트 Linux 명령문
#!/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

노력하다

if [ "$group" = teacher ] 

정신

  • 주변 공간 []
  • = (== 필요하지 않음)
  • 세미콜론 없음

바꾸다

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

답변2

IMO는 caseif/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.

sudosudo그런데, 스크립트 내에서 여러 번 실행하는 것보다 먼저 사용자로부터 입력을 받은 다음 유효성을 검사/위생한 다음 한 번만 실행하여 원하는 작업을 수행하도록 스크립트를 작성하는 것이 더 나을 것입니다 . 필요한 경우 명령줄에 전달된 인수를 기반으로 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그러나 프롬프트에 시간을 낭비하지 않고 질문에 대답하지 않고도 명령줄에서 모든 작업을 수행할 수 있으면 이 스크립트의 요점을 파악하기가 어렵습니다.

답변3

Bash에서는 다음과 같습니다.

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

변수의 수치 테스트입니다. 변수는 숫자로 평가되며, 텍스트만 포함된 경우에는 로 평가됩니다 0.

Bash의 올바른 텍스트 테스트는 다음과 같습니다.

if [[ $group == teacher ]];

==이 경우에는 따옴표가 필요하지 않습니다(항상 그런 것은 아님). 또는 =(내부적으로 동일함 [[) 을 사용할 수 있습니다 .

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

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

실제로는 simple을 사용 [하고 변수를 인용한 다음 를 사용해야 합니다 =.

답변4

#! /bin/bash
echo "Type your username in lowercase letters"
read user
echo "Are you a student or teachers or other"
read group
if [ $group == student ]
then
useradd $user && usermod -aG student $user
echo "sucessfully added to student"
elif [ $group == teachers ]
then
useradd $user && usermod -aG teachers $user
echo "sucessfully added to teachers"
else [ $group == other ]
echo " sorry "
fi

관련 정보