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でのみスクリプトを実行できるようにする2番目のスクリプトを作成します。

たとえば、

#! /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

関連情報