ファイルから生成されたループ

ファイルから生成されたループ

2つの列と2つの行を含むファイル(テスト)があります。

ピコミリメートル

冥王星TT

ディレクトリと所有者を作成し、パスワードを作成したいと思います。このようなアイデアがあります。

while IFS= read a b; do
mkdir -p /srv/ftp/$a
chown -R ftp:ftp /srv/ftp/$a/
passwd $a $b
done <  /test

私は2つ以下pippoのディレクトリを持ちたいのですが、持っているのは次のとおりです。pluto/srv/ftp/pippo

ご協力ありがとうございます。

答え1

あなたが望むIFSスペースは次のようになります:

while IFS=" " read a b; do
mkdir -p /srv/ftp/$a
chown -R ftp:ftp /srv/ftp/$a/
passwd $a $b
done <  /test 

答え2

スペースで区切られた2つのフィールド、ユーザー名とパスワードを含むファイルがあります。

pippo mm
pluto tt

次のスクリプトを使用してファイルを処理し、ユーザーアカウントとそのディレクトリを作成できます。

ftpuid=$(getent passwd ftp | cut -d: -f3)
if test -z "$ftpuid"; then echo "No ftp account" >&2; exit 1; fi

while read -r user password
do
    test -z "$user" && continue
    echo "Creating account for $user, with home /srv/ftp/$user" >&2
    useradd -d /srv/ftp/"$user" -M -N -g ftp -o -u "$ftpuid" "$user"
    mkdir -m700 -p /srv/ftp/"$user"
    chown "$ftpuid":ftp /srv/ftp/"$user"
    test -n "$password" && ( echo "$password"; echo "$password" ) | passwd -q "$user" 2>/dev/null
done < file.txt

たとえば、パスワードを設定する他のオプションがありますが、chpasswdここでは適切ではないと思います。

関連情報