我刚刚在bash中编写了一个脚本,它可以用于多长选项:
#!/bin/bash
OPTS=`getopt -q -o fdhl: -l free,df,help,log: -- "$*"`
#Check if error with getopt
if [ $? != 0 ]
then
echo -e "error: parameter could not be found\n\nUsage:\n supervision [options]\n\n Try 'supervision --help'\n or 'supervision -h'\n for additional help text." ;
exit 1
fi
eval set -- "$OPTS"
while true ; do
case "$1" in
-f|--free)
free -h ;
shift;;
-d|--df)
df -h ; #Run df system command
shift;;
-l|--log)
case "$2" in
"") echo "miss file" ;
shift 2;; #No file passed as parameter
*)
df -h >> "$2" ;
shift 2;;
esac ;;
-h|--help) #Display help
shift;;
--) #End of parsed parameters list
shift ; break ;;
*)
break ;;
esac
done
当我使用超过1个长选项时,我不明白我应该这样做的原因,例如:
sh myscript --free --df
当我使用--log:
时sh myscript --log logfile
两个案例都退出if [$? != 0],看起来像第一个长选项后面的元素没有被解析。
答案 0 :(得分:1)
好的,我想通了,这都归功于" $ *"而不是" $ @"在getopt调用中。我并不完全是为什么,我猜两者都做同样的事情,但事实证明它是造成这个问题的原因。