はじめに
このチャレンジでは、サーバー上でのユーザーの一括追加および削除を自動化する bash スクリプト userctr.sh を作成します。このスクリプトは、操作(add または del)、教師のユーザー名、学生ユーザー名のプレフィックス、および管理する学生の数を指定するためのコマンドライン引数を受け取ります。このタスクは、システム管理に不可欠なシェルスクリプティング、ユーザー管理、および自動化のスキルを向上させます。
ユーザーとグループの作成・削除バッチ
システム管理者は、教室サーバーに教師と複数の学生ユーザーを効率的に追加する方法を必要としています。手動で各アカウントを作成するのは手間がかかり、エラーが発生しやすいためです。このタスクでは、このプロセスを自動化する bash スクリプト userctr.sh を作成します。スクリプトは、操作タイプ、教師の名前、学生の名前のプレフィックス、および学生の数をパラメータとして受け取ります。
タスク
/home/labex/projectディレクトリにuserctr.shという名前の Bash スクリプトを作成します。- スクリプトは、最初のコマンドライン引数によって決定される
addとdelの 2 つの主要な操作を実装する必要があります。 add操作では、教師ユーザーと指定された数の学生ユーザーを作成します。del操作では、指定された教師と学生ユーザーを削除します。- スクリプトは、以下の要件に従ってすべての入力パラメータを検証する必要があります。
要件
実行形式: スクリプトは 4 つの引数で実行可能である必要があります。
sh userctr.sh <operation> <teacher_name> <student_prefix> <student_count>パラメータ検証:
- スクリプトは正確に 4 つの引数を受け取る必要があります。そうでない場合は、
parameter errorと表示して終了する必要があります。 student_count(4 番目の引数)は、1 から 10 までの整数である必要があります。それ以外の場合は、parameter errorと表示して終了する必要があります。student_prefix(3 番目の引数)は、小文字のアルファベットのみで構成されている必要があります。それ以外の場合は、parameter errorと表示して終了する必要があります。
- スクリプトは正確に 4 つの引数を受け取る必要があります。そうでない場合は、
add操作の詳細:- 追加するユーザーが既に存在する場合、作成を試みないでください。代わりに、そのユーザー名を
******で区切って表示します(例:stu3:******)。 - 新規ユーザーには、ランダムな 6 桁の数字のパスワードを生成します。
- 新しく作成された各ユーザーについて、ユーザー名とそのパスワードをコロンで区切って表示します(例:
teacher:901231)。 - 作成されたすべてのユーザーは、デフォルトのシェルとして
/bin/zshを使用する必要があります。 - 教師ユーザーは、管理権限を付与するために
sudoグループに追加する必要があります。
- 追加するユーザーが既に存在する場合、作成を試みないでください。代わりに、そのユーザー名を
del操作の詳細:- スクリプトは、指定された教師と学生ユーザーを、ホームディレクトリを含めて削除する必要があります。
del操作は、何も出力しないものとします。- 削除するユーザーが存在しない場合、スクリプトはエラーを報告せず、他の既存のユーザーの削除を続行する必要があります。
例
以下の例は、スクリプトの期待される動作を示しています。
ユーザーの追加: このコマンドは、1 人の教師(
teacher)と 6 人の学生(stu1からstu6)を追加します。sh userctr.sh add teacher stu 6出力例:
teacher:901231 stu1:271828 stu2:928172 stu3:****** stu4:384712 stu5:098273 stu6:921098この出力の
stu3のアスタリスクは、ユーザーが既に存在していたため、新しいパスワードが生成されなかったことを示しています。ユーザーの削除: このコマンドは、同じユーザーセットを削除します。正常に完了した場合、何も出力されないはずです。
sh userctr.sh del teacher stu 6
ヒント
useraddやuserdelのような root 権限が必要なコマンドの前にsudoを使用します。$#で引数の数を確認します。- 引数には
$1、$2などを使用してアクセスします。 - ユーザーが存在するかどうかを確認するには、
id -u <username>を使用できます。ユーザーが存在しない場合、コマンドはゼロ以外の終了コードを返します。 - ホームディレクトリを作成し、Zsh シェルを設定してユーザーを作成するには、
useradd -m -s /bin/zsh <username>を使用します。 - ユーザーを
sudoグループに追加するには、usermod -aG sudo <username>を使用します。 - ユーザーとそのホームディレクトリを削除するには、
userdel -r <username>を使用します。 - ランダムな 6 桁の数字を生成するには、
shuf -i 100000-999999 -n 1を使用できます。 - 学生の数を反復処理するには、
forループが役立ちます:for ((i=1; i<=$student_count; i++))。 - パラメータを検証するために、パターンマッチングには
if [[ "$string" =~ "regex" ]]を使用します。
まとめ
おめでとうございます!ユーザー管理を自動化する bash スクリプトを正常に作成しました。このスクリプトは、ユーザーをバッチで追加および削除し、入力パラメータを検証し、既存のユーザーを処理することができます。これらは、あらゆるシステム管理者にとって不可欠なスキルです。スクリプト内で、条件分岐、ループ、コマンドライン引数、および useradd や userdel のような外部コマンドの使用を練習しました。



