#!/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は、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
sudo
ちなみに、スクリプト内で何度も実行する前にユーザーから入力を受け取り、検証/衛生してから、一度だけ実行して必要なタスクを実行するようにスクリプトを作成する方が良いでしょう。必要に応じて、コマンドラインに渡された引数に基づいて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