Я хочу, чтобы мой сценарий мог принимать необязательный ввод,
например, в настоящее время мой сценарий
#!/bin/bash
somecommand foo
но я бы хотел сказать:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Я хочу, чтобы мой сценарий мог принимать необязательный ввод,
например, в настоящее время мой сценарий
#!/bin/bash
somecommand foo
но я бы хотел сказать:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Ответы:
Вы можете использовать синтаксис значения по умолчанию:
Выше будет, как описано в Справочном руководстве Bash - 3.5.3 Расширение параметров оболочки [выделено мной]:
Если вы хотите заменить значение по умолчанию только в том случае, если параметр не установлен (но не в том случае, если он нулевой, например, если это не пустая строка), используйте вместо этого следующий синтаксис:
Снова из Справочного руководства Bash - 3.5.3 Расширение параметров оболочки :
источник
foo
если$1
не задано или пустую строку », и${1-foo}
«вернуть,foo
если$1
не задана».Вы можете установить значение по умолчанию для переменной следующим образом:
somecommand.sh
Вот несколько примеров того, как это работает:
источник
-
Меня смутило (это отрицается?).источник
-n
так же, как! -z
.-n
и! -z
поэтому я бы сказал, что это не так.[ -n $1 ]
всегда будет истина . Если вы используете bash,[[ -n $1 ]]
будете вести себя так, как вы ожидаете, в противном случае вы должны процитировать[ -n "$1" ]
Вы можете проверить количество аргументов с
$#
источник
пожалуйста, не забывайте, если его переменная $ 1 .. $ n, вам нужно записать в обычную переменную, чтобы использовать подстановку
источник
DAY=${1:-$(date +%F -d "yesterday")}
Для необязательных множественных аргументов по аналогии с
ls
командой, которая может принимать один или несколько файлов, или по умолчанию перечисляется все в текущем каталоге:Не работает корректно для файлов с пробелами в пути, увы. Пока не разобрался, как заставить это работать.
источник
Это позволяет использовать значение по умолчанию для необязательного 1-го аргумента и сохраняет несколько аргументов.
источник
Можно использовать подстановку переменных для замены фиксированного значения или команды (например
date
) для аргумента. До сих пор ответы были сосредоточены на фиксированных значениях, но это то, что я использовал, чтобы сделать дату необязательным аргументом:источник