Редактирование команды файла в sh-скрипте с выражениями

#linux #shell #ubuntu #ssh

#linux #оболочка #ubuntu #ssh

Вопрос:

В настоящее время я пытаюсь написать сценарий оболочки, который будет принимать две пользовательские переменные ($uname и $dname) и добавлять в виде строки в /etc/rc.local .

Он должен создавать новую строку после строки начала при каждом запуске.

Я использую sed для этого, но, похоже, не могу найти наилучший способ вставить эти переменные в скрипт, в настоящее время у меня есть это, но он выдает «Синтаксическая ошибка: строка без кавычек»:

 sed  '/begin/ mount --bind /var/www/'"$dname"'/htdocs /home/'"$uname"'/'"$dname"'/htdocs' /etc/rc.local
 

Я также хотел бы иметь скрипт, который находит и удаляет эту строку из этого файла на основе $dname.

Любая помощь будет высоко оценена!

Комментарии:

1. Предупреждение: если два пользователя ( $uname ) имеют равные $dname значения, вы можете получить неожиданное поведение.

2.Совет: sed позволяет использовать другой символ, чем / для разделения регулярного выражения. При использовании путей я бы рекомендовал использовать # вместо этого, поэтому вам не нужно использовать разделяющий путь символ с / : sed 's#...#...#'

3. Ошибка: вам нужно указать sed действие для выполнения. Поскольку вы хотите заменить строки, вам нужно добавить an s в начале вашего регулярного выражения (непосредственно перед разделением символа).: sed 's...'

4. Совет: Чтобы заменить строки в файле и сохранить результаты в том же файле, необходимо добавить sed опцию -i или --in-place : sed 's#...#...#' -i /etc/rc.local

5. Совет: Вместо использования одного изменяемого скрипта для всех подключений я бы рекомендовал использовать один неизменяемый скрипт, вызывающий все неизменяемые скрипты, присутствующие в папке. Затем вы создаете (возможно, используя шаблон и / или sed команду) или удаляете файлы вместо того, чтобы изменять их. Это будет намного проще в обслуживании. Вы можете использовать run-parts для запуска всех скриптов в папке.