.csv
bashスクリプトを使用してファイルからデータを取得してユーザーを作成しようとしています。基本は理解していますbash
が、ループを使用してこのスクリプトを作成するのは混乱しています。そのテンプレートは次のとおりです.csv
。
Surname,Name,Username,Department,Password
答え1
これはあなたに役立つか、少なくとも正しい方向を導くのに役立ちます。
#! /usr/bin/env bash -
#set -x
MY_INPUT='/root/temp/input'
declare -a A_SURNAME
declare -a A_NAME
declare -a A_USERNAME
declare -a A_DEPARTMENT
declare -a A_PASSWORD
while IFS=, read -r COL1 COL2 COL3 COL4 COL5 TRASH; do
A_SURNAME+=("$COL1")
A_NAME+=("$COL2")
A_USERNAME+=("$COL3")
A_DEPARTMENT+=("$COL4")
A_PASSWORD+=("$COL5")
done <"$MY_INPUT"
for index in "${!A_USERNAME[@]}"; do
useradd -g "${A_DEPARTMENT[$index]}" -d "/home/${A_USERNAME[$index]}" -s /bin/bash -p "$(echo "${A_PASSWORD[$index]}" | openssl passwd -1 -stdin)" "${A_USERNAME[$index]}"
done
このwhile
ループはファイルを読み取り、csv
各列の配列を作成します。この値は、ファイルに存在できる他のフィールドを収集するTRASH
ために使用されます。csv
それ以外の場合は、次の例があります。surname,name,username,department,password,anextrafield
COL5
次のように設定されます。passwordanextrafield
とにかく、配列設定はあなたには必要ないかもしれないと思います(おそらくwhileループ内でユーザーを作成するからです)。しかし、区切られたファイルをループする方法を学んだことをこの方法で示したかったのです。
その後、for
ループはA_USERNAME
配列(任意の配列であり得る)のインデックス値を繰り返し、その値に対して操作を実行してユーザーを作成します。
useradd
-g "${A_DEPARTMENT[$index]}"
- これにより、新しく作成されたユーザーが部門の名前付きグループに追加されます(注:グループはすでに存在する必要があり、そうでない場合はコマンドでエラーが発生します)。
-d "/home/${A_USERNAME[$index]}"
- これにより、新しく作成されたユーザーのホームディレクトリが次のように設定されます。
/home/[USERNAME]
- これにより、新しく作成されたユーザーのホームディレクトリが次のように設定されます。
-s /bin/bash
- 新しく作成されたユーザーのログインシェルを次に設定します。
/bin/bash
- 新しく作成されたユーザーのログインシェルを次に設定します。
-p "$(echo "${A_PASSWORD[$index]}" | openssl passwd -1 -stdin)"
- csvからパスワードを取得し、opensslを使用してMD5パスワードを生成します。
"${A_USERNAME[$index]}"
- 作成するユーザーです。