debian10 で複数のユーザーを 1 つのグループに追加する

debian10 で複数のユーザーを 1 つのグループに追加する

vi ユーザーリスト.txt

Tom
Josh
Noah

vi グループを追加します。

#!/bin/bash
for user in 'cat userlist.txt'
do
sudo usermod -a -G vncuser $user
done

sh グループを追加します。

Usage usermod [options] LOGIN

この「Usage usermod [options] LOGIN」エラーを解決するにはどうすればよいですか? 申し訳ありませんが、私はこのことについては初心者です。よろしくお願いします。

答え1

ファイルの内容ではなく、「cat userlist.txt」をループしています。つまり、$user は「cat」と等しくなり、次に「userlist.txt」になります。次のようなログ行を追加できます。

echo "Adding user '$user' to group vncuser"

修正方法: バックティックのような形式、 commandまたは $(command) のようなドル括弧形式を使用します。読みやすいので、2 番目の形式を好みます。

for user in $(egrep -v "^#|^$" userlist.txt); do
  echo "Adding user '$user' to group 'vncuser'"
  sudo usermod -a -G vncuser $user
done

ここで何をしたのでしょうか? egrep を使用して、# で始まる行と空行をフィルタリングしました。

答え2

各行の変数を二重引用符で囲みます。

while IFS= read -r line
do
  sudo usermod -a -G vncuser "$line"
done <userlist.txt

chmod +x filename.sh実行する前にを実行します。

答え3

最初のステップ: バッククォート(一重引用符ではない)または演算子のみを使用する必要があり$()ます

for user in $(cat userlist.txt) do
  sudo usermod -a -G vncuser $user
done

さらに、空白行が表示される場合もあるので、

for user in $(cat userlist.txt) do
  test -n "$user" && sudo usermod -a -G vncuser $user
done

そして最後に「cat」を廃止する

while read user ; do
  test -n "$user" && sudo usermod -a -G vncuser $user
done <userlist.txt

関連情報