1

Мне нужно написать shell-скрипт, который обрабатывает 3 параметра ($ 1 $ 2 и $ 3). В bash мне нужно пропустить параметр 2 (на самом деле я пишу что-то вроде ./script.sh para1 para3).

Сценарий в порядке. Но я не могу пропустить второй параметр. Как мне пропустить этот?

4 ответа4

2

Там нет такой вещи, как пропуск, как вы хотели бы. Аргументы просто нумеруются, если нет второго параметра, то… ну, на самом деле нет третьего параметра. Так что либо вы явно указываете строку emptry в качестве второго параметра (если это позволяет ваше упражнение), либо вы проверяете, сколько параметров задано, а в случае двух - второй параметр принимаете за третий (поскольку это школьное задание, я не буду подробности здесь, просто посмотрите описание специальной переменной $# в руководстве по вашей оболочке).

1

Наконец я нашел это:

./script.sh "para1" "" "para3"

Мой учитель должен быть счастлив этим. Он больше ничего не получит от меня.

0

Вы можете проверить наличие вашего третьего параметра. Операторы -z и -n успешно возвращаются, если их аргументы пусты или непусты.
Кроме того, на протяжении всего сценария, используйте para? переменные вместо пронумерованных аргументов.

para1=$1
if [ -z "$3" ]
then
    para3=$2
else
    para2=$2
    para3=$3
fi
0

Правильное использование зависит от контекста, который не понятен из вашего вопроса. Но команда для переименования параметров - это shift

$ help shift

shift: shift [n]
    Shift positional parameters.

    Rename the positional parameters $N+1,$N+2 ... to $1,$2 ...  If N is
    not given, it is assumed to be 1.

Вы могли бы использовать это в цикле для обработки набора аргументов. Вы можете обработать первый аргумент как $ 1, затем shift 2 и третий аргумент будет $ 1.

Для действительно сложных команд вы также можете использовать getopts как и аргументы типа ./command --foo blah --bar asdf .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .