LINUX.ORG.RU

sed необходима помощь


0

0

При администрировании часто возникают задачи, которые могут быть решены универсальными скриптами. Я собираюсь в отпуск и хочу оставить вместо себя с десяток скриптов которые помогут мне спокойно отдохнуть. Помогите разобраться с ситуацией.

В /etc/default лежит файл saslauthd, формат

# This needs to be uncommented before saslauthd will be run automatically
# START=yes
# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"

MECHANISMS="pam"

его надо превратить в

# This needs to be uncommented before saslauthd will be run automatically
START=yes

PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"

# You must specify the authentication mechanisms you wish to use.
# This defaults to "pam" for PAM support, but may also include
# "shadow" or "sasldb", like this:
# MECHANISMS="pam shadow"

MECHANISMS="pam"

Это довольно просто решается
sed -i '/START/s/^.*/START=yes/' ./saslauthd

sed -i '/START/ a\\nPARAMS="-m /var/spool/postfix/var/run/saslauthd -r" \
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"\n' ./saslauthd

Но надо засраховаться и от того что кто то запустит этот скрипт, дважды. Вопрос такой как проверить есть ли такой параметр, если есть заменить его значение, если нет то вставить.


Сделай пару нужных тебе файлов (saslauthd) и меняй их по-мере надобности (можно линком)

sdio ★★★★★
()

> как проверить есть ли такой параметр, если есть заменить его значение, если нет то вставить.

Предварительно погрепать?

Jini ★★
()
Ответ на: комментарий от anonymous

Ну например:
Надо вставить: grep '^START=yes' /etc/default/saslauthd || sed -i ...
Надо удалить/заменить: grep '^START=yes' /etc/default/saslauthd && sed -i ...

Или так:
if grep '^START=yes' /etc/default/saslauthd; then
# заменяем
else
# вставляем
fi

Странно: ты, похоже, умеешь работать с sed'ом и не знаешь таких простых вещей в шелле. Может, я чего-то не понимаю?

Jini ★★
()
Ответ на: комментарий от anonymous

Если речь идет только о таких конфигах -- баш-скрипт с присвоением переменных,
то просто в своем баш-скрипте делаешь:

. /etc/default/saslauthd

if [ -n "$START" -a "$START" == "yes" ]; then
     sed -i ... 
else
   # start not defined or start = "no"
     sed -i ...
fi

sdio ★★★★★
()
Ответ на: комментарий от Jini

> Странно: ты, похоже, умеешь работать с sed'ом и не знаешь таких простых вещей в шелле. Может, я чего-то не понимаю?

Просто я еще в процессе изучения и жизнь заставила изучить sed чуть чуть раньше :-). Спасибо.

Soloik
() автор топика
Ответ на: комментарий от Soloik

Это означает: "Иди в отпуск и ничего на работающем сервере не трогай, а то как бы отпуск досрочно не прервался"

sdio ★★★★★
()
Ответ на: комментарий от sdio

:-)

Но все же. Не встречалось мне такой комбинации.

Soloik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.