Я чрезвычайно новичок в bash и мне нужно создать скрипт, который вызывает другой скрипт, в зависимости от того, какой переключатель командной строки используется.
Давайте назовем это stuff.sh
чем stuff.sh --help
должен вести себя так же, как справка в обычной программе и дать пользователю список того, что он может сделайте
Когда я выполняю сценарий с stuff.sh - a
, он должен что-то сделать, скажем, вызвать другой сценарий с sudo
перед ним.
Как я мог это сделать?
Любые идеи, которые каждый, кто новичок в bash, может легко понять?
Спасибо!
#!/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
является вторым, и так далее.Прочитайте страницу справочника удара для ссылки.
Если Вы соглашаетесь с -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
.