/root/nbu/file1.sh
ユーザーのIDが偶数の場合は、各ユーザーのホームディレクトリにコピーする必要があります。
次のスクリプトを実行してみてください。
#!/bin/bash
cat /etc/passwd | while read LINE
do
username=$(awk -v var="$LINE" -F: '{
if ($3 % 2 == 0)
print $1
}')
cp /root/nbu/file1.sh ~"$username"
done
しかし、それは何もしません。コマンドをエコーしcp /root/nbu/file1.sh ~"$username"
てスクリプトから直接実行すると機能します。
~
bashスクリプトで問題が拡大しているようですが、この問題を解決する方法がわかりません。
よろしくお願いします。
ベストアンサー1
ユーザー名部分が引用されている場合、チルダ拡張は効果がありません。
$ echo ~root ~"root"
/root ~root
(とにかく、変数拡張の前に発生します。)
しかし、passwd
シェルから読んだので、全体の内容を実行してみてはいかがでしょうか?
#!/bin/bash
getent passwd | while IFS=: read -r user pass uid gid gecos home shell; do
if (( uid % 2 == 0 )); then
echo "uid $uid of user '$user' is even and their home is '$home'";
fi;
done
システムにいる場合は、自分で使うgetent
よりもお勧めします/etc/passwd
。
一方、何も実行するのに実際にはユーザー名が必要ではないようですawk
。目次( $6
) 彼とは逆です。