.csvファイルからユーザーを作成する

.csvファイルからユーザーを作成する

.csvbashスクリプトを使用してファイルからデータを取得してユーザーを作成しようとしています。基本は理解しています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

  1. -g "${A_DEPARTMENT[$index]}"
    • これにより、新しく作成されたユーザーが部門の名前付きグループに追加されます(注:グループはすでに存在する必要があり、そうでない場合はコマンドでエラーが発生します)。
  2. -d "/home/${A_USERNAME[$index]}"
    • これにより、新しく作成されたユーザーのホームディレクトリが次のように設定されます。/home/[USERNAME]
  3. -s /bin/bash
    • 新しく作成されたユーザーのログインシェルを次に設定します。/bin/bash
  4. -p "$(echo "${A_PASSWORD[$index]}" | openssl passwd -1 -stdin)"
    • csvからパスワードを取得し、opensslを使用してMD5パスワードを生成します。
  5. "${A_USERNAME[$index]}"
    • 作成するユーザーです。

関連情報