Ответ 1
getopts здесь полезен: getopts
Какой "правильный" способ обрабатывать отсутствующие аргументы в оболочке script? Есть ли предустановленный способ проверить это, а затем выбросить исключение? Я абсолютный новичок.
getopts здесь полезен: getopts
Типичные сценарии оболочки начинаются с разбора параметров и аргументов, переданных в командной строке. Количество аргументов сохраняется в параметре #
, т.е. Вы получаете его с помощью $#
. Например, если ваши скрипты требуют ровно три аргумента, вы можете сделать что-то вроде этого:
if [ $# -lt 3 ]; then
echo 1>&2 "$0: not enough arguments"
exit 2
elif [ $# -gt 3 ]; then
echo 1>&2 "$0: too many arguments"
exit 2
fi
# The three arguments are available as "$1", "$2", "$3"
Встроенная команда exit
завершает выполнение script. Integer аргумент - это возвращаемое значение script: 0, чтобы указать успех и небольшое положительное целое число, указывающее на отказ (общее соглашение состоит в том, что 1 означает "не найден" (думаю, grep), а 2 означает "непредвиденная ошибка" (непризнанная параметр, недопустимое имя входного файла,...)).
Если ваш script принимает параметры (например, -x
), используйте getopts.
Пример script (myscript.sh):
#!/bin/bash
file1=${1?param missing - from file.}
file2=${2?param missing - to file.}
[...]
Пример:
$ ./myscript.sh file1
./myscript.sh: line 4: 2: param missing - to file.
Параметр nounset
сделает bash обрабатывать неустановленные переменные и параметры как ошибку.
Пример script (myscript.sh
):
#!/bin/bash
set -o nounset
echo First argument: $1
echo OK
Пример:
$ ./myscript.sh; echo $?
./myscript.sh: line 4: $1: unbound variable
1
$ ./myscript.sh foo; echo $?
First argument: foo
OK
0
В моем случае я использовал GIT_SSH_COMMAND
, который не понравился -o KEY Value
, он хочет
ssh -o KEY=value