Как создать bash-скрипт, который вызывает другие скрипты в зависимости от параметра командной строки

Я чрезвычайно новичок в bash и мне нужно создать скрипт, который вызывает другой скрипт, в зависимости от того, какой переключатель командной строки используется.

Давайте назовем это stuff.sh

чем stuff.sh --help должен вести себя так же, как справка в обычной программе и дать пользователю список того, что он может сделайте

  • - вы можете делать такие вещи.
  • -б вы можете делать такие вещи.
  • -с это очень модные вещи.

Когда я выполняю сценарий с stuff.sh - a, он должен что-то сделать, скажем, вызвать другой сценарий с sudo перед ним.

Как я мог это сделать?

Любые идеи, которые каждый, кто новичок в bash, может легко понять?

Спасибо!

2
задан 22 June 2013 в 14:16

2 ответа

#!/bin/bash

function show_help() {
    cat << ENDHELP
-a you can do stuff like that.
-b you can do stuff like that.
-c this is extremely fancy stuff.
ENDHELP
}

case $1 in
    --help)
        show_help
    ;;
    -a)
        sudo /path/to/other/script
    ;;
    -b)
        do_some_stuff
        do_another_stuff
    ;;
    -c)
        do_extremely_fancy_stuff
        do_another_extremely_fancy_stuff
        run_as_many_commands_as_you_want
    ;;
    *)
        echo "Run $0 --help"
    ;;
esac
  • $0 название сценария.
  • $1 первый параметр командной строки, $2 является вторым, и так далее.

Прочитайте страницу справочника удара для ссылки.

5
ответ дан 22 June 2013 в 14:16

Если Вы соглашаетесь с -h вместо --help можно также использовать getopts, который очень удобен. Код Вам затем было бы нужно (измененный из ответа Eric Carvalho):

#!/bin/bash

function show_help() {
    cat << ENDHELP
-a you can do stuff like that.
-b you can do stuff like this.
-c this is extremely fancy stuff.
ENDHELP
}

#checks if there are any arguments by (ab)using the short-circuited OR
(( $# )) || echo "No arguments. Run $0 --help"

while getopts 'habc' opt; do
        case "$opt" in
            h)
                show_help
            ;;
            a)
                echo "sudo /path/to/other/script"
            ;;
            b)
                echo "do_some_stuff"
                echo "do_another_stuff"
            ;;
            c)
                echo "do_extremely_fancy_stuff"
                echo "do_another_extremely_fancy_stuff"
                echo "run_as_many_commands_as_you_want"
            ;;
            *)
                echo "Run $0 --help"
            ;;
        esac
done

Теперь можно передать несколько опций сценарию оболочки, поэтому если Вы хотите выполнить a, b и c, можно сделать

./script.bash -a -b -c

или даже

./script.bash -abc

Строка опции 'habc' говорит Вам, которых опции разрешены, getopts автоматически скажет Вам о неподдерживаемых опциях. Можно также добавить аргументы опциям (таким как название других скриптов, которые Вы хотите запустить), затем необходимо добавить двоеточие (:) позади Вашей опции аргумент затем хранится в $OPTARG. Посмотрите этот (неполный) wikipage о том, как сделать это.

PS можно также использовать (более старое) getopt (без s), getopt немного более твердо, но позволяет Вам использовать --help.

1
ответ дан 22 June 2013 в 14:16

Другие вопросы по тегам:

Похожие вопросы: