ユーザー(ワイルドカード)ホームディレクトリにファイルをコピーするBashスクリプト

ユーザー(ワイルドカード)ホームディレクトリにファイルをコピーするBashスクリプト

/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) 彼とは逆です。

おすすめ記事