Как использовать переменные в SED в bash-скриптах?

Как правильно использовать переменную, введенную ранее, в команде SED?
  • 9 ноября 2023 г. 19:28
Ответы на вопрос 2
В bash-скриптах переменные могут быть использованы в командах SED следующим образом:

1. Определите переменную в скрипте, указав ей значение:

```
variable="значение переменной"
```

2. Используйте переменную в команде SED, заключив ее в двойные кавычки и предварив символом доллара:

```
sed "s/искомая_строка/$variable/g" файл
```

Здесь `искомая_строка` - это строка, которую вы хотите заменить на значение переменной `$variable`, `файл` - это имя файла, в котором нужно произвести замену.

3. Пример использования переменной в команде SED:

```
variable="Привет, мир!"
sed "s/мир/$variable/g" файл.txt
```

В этом примере SED найдет все вхождения строки "мир" в файле "файл.txt" и заменит их на значение переменной `$variable`.

Обратите внимание, что если значение переменной может содержать специальные символы (такие как слэш `/`), вам нужно экранировать их перед использованием в команде SED. Это можно сделать с помощью команды `sed "s/искомая_строка/$(sed 's/\//\\\//g' <<< $variable)/g" файл`. В этом примере символ `/` будет заменен на `\/` в значении переменной `$variable`, чтобы его можно было использовать без ошибок в команде SED.
# Запрашиваем новый порт для SSH
echo "Введите новый порт для SSH"
read newport
sed -i "s/#Port 22/Port $newport/I" /etc/ssh/sshd_config
systemctl restart sshd.service
echo "Порт изменен на $newport"

Для отладки вместо -i поставь -e (изменения будет только в выводе)

Однако если ты пишешь скрипт рекомендую сразу писать все функции, не забыть про проверки, а еще лучше вынести их вообще в отельную функцию, но это я уже уплыл по древу.

#!/bin/bash

# Функция для изменения порта SSH
change_ssh_port() {
    local newport=$1  # Принимаем новый порт как аргумент функции

    # Проверяем, что порт является числом и находится в допустимом диапазоне
    if ! [[ "$newport" =~ ^[0-9]+$ ]] || [ "$newport" -lt 1 ] || [ "$newport" -gt 65535 ]; then
        echo "Ошибка: Порт должен быть числом от 1 до 65535."
        return 1
    fi

    # Заменяем строку с комментарием на новый порт в конфигурационном файле SSH
    sed -i "s/#Port 22/Port $newport/I" /etc/ssh/sshd_config

    # Проверяем, что конфигурация SSH корректна
    if sshd -t; then
        # Перезапускаем службу SSH для применения изменений
        systemctl restart sshd.service
        echo "Порт изменен на $newport"
    else
        echo "Ошибка: Конфигурация SSH некорректна. Изменения не применены."
        return 1
    fi
}


echo "Введите новый порт для SSH:"
read newport  # Читаем новый порт от пользователя

# Вызываем функцию с введенным номером порта
change_ssh_port "$newport"
Похожие вопросы