対話型スクリプト
スクリプトは、ユーザーに作成するアカウントの数と名前のプレフィックスを尋ねる必要があります。その後、ユーザーが指定した数のアカウントを作成する必要がありますが、すでに作成されているユーザーはスキップする必要があります。
つまり、user03が存在する場合は、使用可能な次の番号user04またはuser05に移動します。 **********
以下は私が書いたスクリプトですが、期待どおりに動作しません。
#!/bin/bash
Clear
Declare -I num
Start=1
Echo -n “Enter number of accounts to be created: “
Read num
Echo -n “Enter user prefix: (student or user)”
Read pre
Echo “”
For I in { $num }
Do
Echo “Adding user”
Useradd -m $pre$num
((num++))
done
答え1
“...”
大文字で表してはいけない単語(Unixのコマンド名は大文字と小文字を区別する)が含まれており、一重引用符(代わりに"..."
)を使用するスクリプトをワードプロセッシングプログラムに書き込んだようです。スクリプトを作成するには、より単純なテキストエディタ(たとえば、nano
または)を使用することをお勧めします。ウェブサイトemacs
vim
https://www.shellcheck.net/スクリプトで簡単なエラーを見つけるのに非常に便利です。
ヒントとして、すべてのコマンド名は小文字でなければならず、引用符を変更する必要があります。
ループも少し変です。一方では、ループが欲しいと思う{ $num }
(何を意味するのか分からない)、一方ではnum
ループ内で増加します。これはnum
ユーザーが入力した数字なので、増やす必要はありません。ループ内の変数を更新するとしましょう。
number=1
while [ "$num" -ne 0 ]; do
# code here that increments "number",
# and conditionally decrements "num"
done
ユーザー名に使用されている番号を追跡し続ける必要があることに注意してください。また作成されたユーザーの数。正しい数のユーザーがいつ作成されたかを確認し、システムにすでに存在するユーザー名をスキップできるようにするには、この情報が必要です。ここで私は選ぶ削減 num
という変数に、ユーザー名に使用されている数を保持しながらゼロに達するまでnumber
。
ループ内では、次のことを行う必要があります。努力するユーザーを作成し、$pre$number
成功すると減少しますnum
。各繰り返しごとに常に増加しますnumber
。 0に達するまで繰り返しますnum
。これは、すべてのユーザーを作成したことを意味します。
成功と失敗が正常な終了状態を返すと仮定するとadduser
(注:私はLinuxユーザーではないので、既存のユーザーを作成しようとするとCentOSで何が起こるのかわかりません)、次のようにユーザーを追加できます。
if adduser -m "$pre$number"; then
# adduser succeeded, we've created a new user, decrement num
num=$(( num - 1 ))
fi
number=$(( number + 1 ))
またはできます提案されたユーザー名が存在することを確認してください。初めての使用getent
:
if ! getent passwd "$pre$number" >/dev/null; then
# the user don't exist, create it
adduser -m "$pre$number"
num=$(( num - 1 ))
fi
number=$(( number + 1 ))
getent passwd
指定されたユーザー名がシステムに存在しない場合、コマンドは失敗します。ここではadduser
、既存のユーザー名で呼び出すことを避けるために、この事実を利用します。
スクリプトの冒頭にあるほとんどのコードは無視しますが、num
整数として宣言する必要はなく、特定のread -p 'prompt' var
プロンプトを介してユーザーから値を読み取ることを指摘します。したがって、echo
これらの記述は必要ありません。
文字列$pre
でなくても(現在のコードの出力で提案されているように)、コードの文字列が実際に受け入れられることを考慮することもできます。student
user
$pre
たとえば、スペースが含まれている場合など、ユーザー名が無効である可能性がある状況も考慮する必要があります。コードの書き方によっては、ユーザー名で解決しないと、$pre$number
アカウントを作成できないか、無制限にアカウントを作成しようとする場合があります。