В скриптах bash значения по умолчанию для переменных и параметров можно задать с помощью специального синтаксиса, называемого подстановкой параметров (parameter substitution).
Синтаксис :- для присвоения значения по умолчанию
Самый распространённый способ — использовать оператор ${переменная:-значение_по_умолчанию}. Он подставляет значение переменной, если она установлена и не пуста, иначе использует значение_по_умолчанию.
Пример для позиционных параметров:
bash
#!/bin/bash
# Если первый аргумент ($1) не передан или пуст,
# переменной `NAME` будет присвоено значение "Гость".
# Если аргумент передан, используется его значение.
NAME=${1:-"Гость"}
echo "Привет, $NAME!"
Используйте код с осторожностью.
Как это работает:
- Запуск без аргумента:
./мой_скрипт.sh- Вывод:
Привет, Гость!
- Вывод:
- Запуск с аргументом:
./мой_скрипт.sh Иван- Вывод:
Привет, Иван!
- Вывод:
Различия в операторах
В bash есть несколько операторов для работы со значениями по умолчанию:
${переменная:-значение_по_умолчанию}: Использует значение по умолчанию, если переменная не установлена или пуста. Сама переменная при этом не изменяется.${переменная:=значение_по_умолчанию}: Использует значение по умолчанию, если переменная не установлена или пуста, и присваивает это значение самой переменной.${переменная-значение_по_умолчанию}: Более строгий вариант. Использует значение по умолчанию, только если переменная не установлена. Если переменная пуста (variable=""), тозначение_по_умолчаниюне будет использовано.
Присвоение переменным с именами
Для скриптов, где параметры передаются не по порядку, а с именами, можно использовать аналогичный подход:
bash
#!/bin/bash
# Сначала задаём значения по умолчанию
SERVER="localhost"
PORT=8080
# Затем проходим по всем аргументам, чтобы перезаписать значения по умолчанию
for arg in "$@"; do
case $arg in
--server=*)
SERVER="${arg#*=}"
;;
--port=*)
PORT="${arg#*=}"
;;
esac
done
echo "Подключение к серверу: $SERVER на порту: $PORT"
Как это работает:
- Запуск без аргументов:
./мой_скрипт.sh- Вывод:
Подключение к серверу: localhost на порту: 8080
- Вывод:
- Запуск с аргументами:
./мой_скрипт.sh --port=9000- Вывод:
Подключение к серверу: localhost на порту: 9000
- Вывод:
- Запуск с несколькими аргументами:
./мой_скрипт.sh --server=prod.local --port=8888- Вывод:
Подключение к серверу: prod.local на порту: 8888
- Вывод: