我对 bash 非常陌生,需要创建一个脚本,该脚本根据所采用的命令行开关调用另一个脚本。
我们将其称为 stuff.sh
应该stuff.sh --help
像普通程序中的帮助一样运行,并向用户提供他可以做什么的列表
- -a 你可以做类似的事情。
- -b 你可以做类似的事情。
- -c 这是极其奇特的东西。
当我用它执行脚本时stuff.sh - a
应该做一些事情,比如说在sudo
它前面调用另一个脚本。
我怎能这样做?
有没有什么想法可以让刚接触 Bash 的人都轻松理解?
谢谢你!
答案1
#!/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
是第二个,依此类推。
阅读 bash手册页以供参考。
答案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
现在你可以将多个选项传递给你的 shellscript,所以如果你想运行 a、b 和 c,你可以这样做
./script.bash -a -b -c
甚至
./script.bash -abc
选项字符串'habc'
会告诉您哪些选项是允许的,getopts
会自动告诉您不支持的选项。您还可以向选项添加参数(例如要运行的其他脚本的名称),然后需要在:
选项后面添加冒号(),然后将参数存储在中$OPTARG
。请参阅这个(不完整的)维基页面如何做到这一点。
PS 您还可以使用(旧版)getopt
(不带s)getopt
有点难,但允许您使用--help
。