1

Я новичок в сценарии Bash (не программирование в целом).

Я пишу сценарий bash, который будет запускать сценарий Python, который я написал.

Я хочу иметь возможность сделать следующее:

  • Передайте параметры в bash-скрипт через cronjob (чтобы у меня было два задания cron), один из которых будет запущен с параметром 'foobar', а другой 'foo'

  • переключение на основе параметра, переданного в сценарий bash (под переключением я подразумеваю if/else на основе параметра, переданного в сценарий bash).

3 ответа3

2

Я думал о том, чтобы отослать вас к stackoverflow, но это настолько низкоуровневое «программирование», что может быть лучше просто сделать это здесь.

На первый параметр скрипта оболочки ссылается $1 , на второй $2 и т.д. Десятый нельзя назвать $10 потому что это $1 за которым следует 0 , поэтому вы называете его ${10} , хотя если вам нужно явно обратиться к десятому параметру (и не обрабатывать его в цикле), вы вероятно, что-то делаю не так.

Количество параметров находится в переменной $#

Я бы предложил:

if [ $# -ne 1 ]
then
    echo "No parameter given" >&2
    exit 1
elif [ "$1" == 'foo' ]
then
    ./script someparams ....
elif [ "$1" == 'foobar' ]
then
    ./script otherparams ....
else
    echo "Bad parameter given" >&2
    exit 1
fi
1

Другой формой для if..elif..elif..else..fi является инструкция case

case "$1" in
  foobar) 
    ./script.py arg1 arg2
    ;;
  foo)
    ./script.py arg3 arg4
    ;;
  *)
    echo "unknown argument: $1"
    ;;
esac

case использует поиск в стиле glob, поэтому * означает "все остальное"

Вы обнаружите, что bash является довольно привередливым языком, где цитирование или отсутствие цитирования переменной может вызвать большие различия в том, как работает ваш скрипт. Привыкайте цитировать все ваши переменные.

1

Вы также можете использовать getopts для более гибкого способа передачи аргументов в скрипт bash. Используя getopts вы можете удалить фиксированный порядок, связанный с передаваемыми аргументами, что может привести к неправильной передаче данных, если вы забудете порядок аргументов.

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