我有一个基本上解析文件的脚本。在执行这个脚本时,我想设置两个标志。
这是我的两种情况:我想设置--hello-you
为一个标志,然后在其后采用两个强制参数: ./script.sh --hello-you <FILE> <PATH>
我想-h or --help
提供帮助手册。
./script.sh --help
或者./script.sh -h
我知道 -h 或 --help 通过大小写 $1 很容易,但问题是当用户按下时--hello-you
程序会识别为-h
答案1
最好忘记长选项并简单地使用getopts
它来执行此操作,但否则您可以循环遍历位置参数,类似于:
#!/bin/bash
usage () {
cat <<EOF >&2
Usage: $(basename "$0") [-h] --hello-you FILE PATH
EOF
exit 1
}
while (($#)); do
case $1 in
--hello-you)
file=$2
path=$3
shift 2
[[ -z "$file" || -z "$path" ]] && usage
;;
-h|--help) usage;;
*) usage;;
esac
shift
done
echo "File is $file"
echo "Path is $path"
我不确定您之前尝试过什么,但大小写不会解释--hello-you
为-h
.也许你的案例有类似的情况--h*)
?
此外,这只是检查file
和path
是否已设置,而不是检查它们是否是文件,但您可能需要根据您是否希望它们在脚本运行之前存在来执行此操作。它也根本不需要--hello-you
设置,因为不清楚这是否是您的意图。