nev3r17
@nev3r17

Ошибка в задаче bash при изменении оболочек юзеров из файла. Как исправить?

Решал задачку, в которой необходимо написать скрипт на bash, который бы создавал пользователей из файла users.txt, а позже менял их оболочку с /bin/sh на /bin/bash. Собственно с последним и возникли проблемы. Я написал вот такой цикл:

for line in $(cat users.txt | sed '/#[^ ]/d')
do
        sudo sed -i \"/^" $line ":/s/\\/bin\\/sh/\\/bin\\/bash/\" /etc/passwd
done

Ошибок никаких не выдает, просто не задает оболочку, ничего не меняется.
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Если у вас такая задача, то она непонятно чему учит.
Слишком ненужные и длинные цепочки
Итак.

1. sed умеет сам открывать файлы. то есть вместо cat users.txt | sed можно просто sed users.txt
2. учитесь смотреть промежуточные значения, тот же ваш $line перед выполнением
3. Учитесь пользоваться sed без -i и смотреть промежуточный результат перед тем как он полезет в файл.
4. Что у вас с кавычками?
/^" $line ":/ это что?
вы пытаетесь пользоваться регулярками без понимания что это такое?
Вы вообще не понимаете как хотя бы одну строчку изменить через sed?

Тут даже чинить нечего, в строчке с sed все неверно.

for user in $(grep -vP "^(/s)*#" users.txt)
do
   sudo sed -ir $user "/^$user:/s/\\bin\\sh/\\bin\\bash/" /etc/passwd
done
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы