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
ここでは適切ではないと思います。