我正在努力学习案例,因为我正在编写一个功能齐全的脚本.
我从下面开始
#!/bin/sh
case $@ in
-h|--help)
echo "You have selected Help"
;;
-B|-b)
echo "You have selected B"
;;
-C|-c)
echo "You have selected C"
;;
*)
echo "Valid Choices are A,B,C"
exit 1
;;
esac
Run Code Online (Sandbox Code Playgroud)
我想使用以下两个选项:
./getopts.sh -h -c
Run Code Online (Sandbox Code Playgroud)
但我得到这个结果有效选择是A,B,C
请你帮帮忙,让我知道我做错了什么?
我想构建一个脚本,如果你输入一个选项会做一些事情但是如果你输入多个就做多件事.
另外,我将如何解析$ 1这个脚本作为surley哪个选项我先输入(-h)将是1美元?
谢谢!
Bru*_*ett 12
试试这个
#!/bin/sh
usage() {
echo `basename $0`: ERROR: $* 1>&2
echo usage: `basename $0` '[-a] [-b] [-c]
[file ...]' 1>&2
exit 1
}
while :
do
case "$1" in
-a|-A) echo you picked A;;
-b|-B) echo you picked B;;
-c|-C) echo you picked C;;
-*) usage "bad argument $1";;
*) break;;
esac
shift
done
Run Code Online (Sandbox Code Playgroud)
使用getopt
或是getopts
更好的解决方案.但是要回答你的直接问题,那$@
就是你的所有论证,-h -c
这与你的case语句中的任何单参数模式都不匹配.您仍然需要像这样迭代您的参数
for arg in "$@"; do
case $arg in
....
esac
done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22591 次 |
最近记录: |