Задать вопрос
r3dix0r
@r3dix0r

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

echo "Введите новый порт для SSH"
read newport
sed -i "s/#Port 22/Port $newport/I" /etc/ssh/sshd_config
systemctl restart sshd.service
echo "Порт Изменен на $newport"

Есть такой код,вопрос как правильно объявить для SED переменную введенную строкой ранее. Заранее спасибо
  • Вопрос задан
  • 41 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
Вариант 1
# Запрашиваем новый порт для 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 (изменения будет только в выводе)

Однако если ты пишешь скрипт рекомендую сразу писать все функции, не забыть про проверки, а еще лучше вынести их вообще в отельную функцию, но это я уже уплыл по древу.
Вариант 2
#!/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"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы