vi userlist.txt
Tom
Josh
Noah
vi addgroup.sh
#!/bin/bash
for user in 'cat userlist.txt'
do
sudo usermod -a -G vncuser $user
done
sh addgroup.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). Я предпочитаю второй вариант, потому что его легче читать.
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
И наконец, избавьтесь от `кошки'
while read user ; do
test -n "$user" && sudo usermod -a -G vncuser $user
done <userlist.txt