Я новичок в написании сценариев на bash. Я хочу создать сценарий bash для автоматической установки и настройки компонентов в моем Linux.
Предположим, я хочу отредактировать
/etc/yum.repos.d/epel.repo
скриптом bash
Я хочу сделать следующее
Для первой части я добавил
yum install nano
nano /etc/yum.repos.d/epel.repo
Мой вопрос: как выполнить 2-ю и 3-ю часть с помощью сценария bash с помощью nano (если возможно, в случае невозможности покажите мне с помощью sed)
Также в некоторые моменты мне придется изменить переменные в файлах, например,
Я знаю, что это требовательно, но мне нужно создать это для друга, который является новичком в управлении сервером. К сожалению, у меня нет времени изучать скрипты bash с самого начала, так как мои экзамены так близки. Я буду использовать ваши примеры для написания скрипта.
Ребята, спасибо за все ответы. Я успешно выполнил большую часть сценария bash.
Однако у меня есть другая проблема. Предположим, я хочу изменить nginx.conf с помощью sed. Мы будем иметь дело с worker_processes.
Теперь я хочу использовать sed, чтобы сделать следующее: 1. Найдите ПЕРВОЕ появление из worker_processes
в этой конфигурации и замените текст на worker_processes 4;
Специальное примечание: это всего лишь пример. Может случиться так, что conf содержит worker_processes 1; . Это сложная часть. Мне нужна команда sed, которая находит Случай матча ПЕРВЫЙ КОТ слова worker_processes , удалите строку текста, в которой найдено слово, и вставьте worker_processes 4;
тут же сохраняем файл. Это самый надежный метод редактирования файлов (без риска нарушения каких-либо настроек).
Последнее предложение, которое я использовал sed -i 's / enabled = 0 / enabled = 1 / g' /etc/yum.repos.d/remi.repo, чтобы изменить enabled = 0 на enabled = 1 в разделе [remi] в remi .repo. Однако у меня есть чувство, что он может изменить все enabled = 0 в этом файле, что приведет к поломке сервера. Кто-нибудь может предложить лучший код.
Еще кое-что, в чем я не уверен: PI хочу отредактировать файл, который имеет это как Text Testing = "0" (да, в нем есть кавычки, и мне нужно их сохранить). Его следует изменить с Testing = "0" на Testing = " 1 "(в кавычках)
Также мне нужно добавить текст с кавычками в конец файла с помощью sed. Например, «Спасибо, Quanta» (с цитатой). Для php вы помещаете \ с повторяющимися кавычками, не знаю, как это делается для bash
Еще одна вещь
Мне нужно изменить строку в конфиге, но я не помню, какой текст нужно заменить
Как и его listen = something; , я хочу изменить его на listen = /tmp/php5-fpm.sock;
Большие пальцы вверх для квантов
Спасибо за отличную поддержку, ребята
sed '/enabled=1/a\priority=10' /etc/yum.repos.d/epel.repo
Укажите параметр редактирования на месте (-i
), если хотите (делает резервную копию с .bak
расширение сначала):
sed -i.bak '/enabled=1/a\priority=10' /etc/yum.repos.d/epel.repo
Теперь я хочу использовать sed, чтобы сделать следующее: 1. Найти ПЕРВОЕ появление worker_processes в этом conf и заменить текст на worker_processes 4;
sed '0,/worker_processes [0-9]*;/s//worker_processes 4;/' /etc/nginx/nginx.conf
Последнее предложение, которое я использовал
sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/remi.repo
изменитьenabled=0
кenabled=1
под[remi]
раздел вremi.repo
. Однако я чувствую, что это может изменить всеenabled=0
в этом файле, что приведет к поломке сервера. Кто-нибудь может предложить лучший код
Здесь для вас:
sed '/\[remi\]/,/enabled=0/ { s/enabled=0/enabled=1/ }' remi.repo
Еще кое-что, в чем я не уверен: PI хочу отредактировать файл, который имеет это как Text Testing = "0" (да, в нем есть кавычки, и мне нужно их сохранить). Его следует изменить с Testing = "0" на Testing = " 1 "(в кавычках)
sed 's/Testing = "0"/Testing = "1"/g'
Также мне нужно добавить текст с кавычками в конце файла с помощью sed. Например, «Спасибо, Quanta» (с цитатой). Для php вы помещаете \ с повторяющимися кавычками, не знаю, как это делается для bash
sed '$a"Werulz, you are welcome"\'
Еще мне нужно изменить строку в конфиге, но я не помню, какой текст нужно заменить
Как и его listen = something; , я хочу изменить его на listen = /tmp/php5-fpm.sock;
sed 's/listen = .*/listen = \/tmp\/php5-fpm.sock;/'
Как сказал птман, Авгий может спасти вас от использования sed
/awk
:
$ augtool -s set /files/etc/yum.repos.d/epel.repo/epel/priority 10
установит приоритет epel
репозиторий на 10. Если priority
ключ уже существует, он установит его значение, иначе он добавит priority
запись после последней записи в разделе.
То же самое касается других значений, которые вы можете изменить.
Если вы хотите изменить несколько значений, вы даже можете использовать augtool
как переводчик:
$ cat epel.augtool
#!/usr/bin/augtool -sf
# Make a variable
defvar epel /files/etc/yum.repos.d/epel.repo/epel
# Set values
set $epel/enable 1
set $epel/priority 10
set $epel/Testing 0
$ chmod +x epel.augtool
$ ./epel.augtool
Saved 1 file(s)
Если вы хотите сохранить его в своем сценарии bash, вы можете передать команды в augtool
:
cat <<EOF | augtool
# Make a variable
defvar epel /files/etc/yum.repos.d/epel.repo/epel
# Set values
set $epel/enable 1
set $epel/priority 10
set $epel/Testing 0
save
EOF
Видеть man augtool
для дополнительных опций.
Есть несколько преимуществ использования Augeas vs. sed
/awk
:
yum.repo
синтаксис). Вы не рискуете нарушить синтаксис файла, если ваше регулярное выражение неверно;yum.repo
разделы, чтобы вы знали, что редактируете правильный раздел;