我有这个
USAGE="Usage: -f [file name] -c [column] -v [value] ."
while getopts ":f:c:v: " OPTIONS; do
case $OPTIONS in
f ) file=$OPTARG;;
c ) column=$OPTARG;;
v ) value=$OPTARG;;
h ) echo $USAGE;;
\? ) echo $USAGE
exit 1;;
* ) echo $USAGE
exit 1;;
esac
done
文件名是fun2.sh ...如果他们未能在-f或-c或-v中放置参数,我想回显$ USAGE。
我试过放
" ") echo $USAGE
exit1;;
但这不起作用..
我也试过
if [ $file || $column || $value == "" ]
echo $USAGE
但是又一次没用......
任何帮助将不胜感激
修改
什么对我有用
if [ "$file" == "" ] ;
then
echo $USAGE
elif [ "$column" == "" ];
then
echo $USAGE
elif [ "$value" == "" ];
then
echo $USAGE
else
show_column
check_temp
file_move
write_file
答案 0 :(得分:2)
尝试:
[[ -z "$file" || -z "$column" || -z "$value" ]] && echo "$USAGE" && exit
答案 1 :(得分:1)
你不能在循环中这样做。检查循环后变量的值,如果它们为空或值错误(例如,不是整数),则打印$USAGE
。
答案 2 :(得分:0)
不完全确定为什么你的代码不起作用,但这应该:
USAGE="Usage: -f [file name] -c [column] -v [value] ."
params="$(getopt -o f:c:v:h --name "$(basename -- "$0")" -- "$@")"
if [ $? -ne 0 ]
then
echo "$USAGE"
exit 1
fi
eval set -- "$params"
while true
do
case $1 in
-f)
file="$2"
shift 2
;;
-c)
column="$2"
shift 2
;;
-v)
value="$2"
shift 2
;;
-h)
echo "$USAGE"
exit
;;
--)
shift
break
;;
*)
echo "$USAGE"
exit 1
;;
esac
done
答案 3 :(得分:0)
John,我不明白你的代码有什么不好:在我的bash中得到以下内容:(脚本的名称是“go”) - 好的意思是,得到了我的预期。
jonatan:shell clt$ ./go
#ok
jonatan:shell clt$ ./go ewdwedw
#ok
jonatan:shell clt$ ./go -a
Usage: -f [file name] -c [column] -v [value] .
#ok, -a is incorrect
jonatan:shell clt$ ./go -f
Usage: -f [file name] -c [column] -v [value] .
#ok, -f need an argument
jonatan:shell clt$ ./go -f aaa
#ok, -f has an argiment
jonatan:shell clt$ ./go -c
Usage: -f [file name] -c [column] -v [value] .
jonatan:shell clt$ ./go -c -v
#hm - "-v" comes into `column`, so syntactically is ok, but ....
因此您需要另外检查 - 就像您已经完成的那样。所以,你的脚本没问题。
这是我的“去”。
#!/bin/bash
USAGE="Usage: -f [file name] -c [column] -v [value] ."
while getopts ":f:c:v:" OPTIONS; do
case "$OPTIONS" in
f ) file=$OPTARG;;
c ) column=$OPTARG;;
v ) value=$OPTARG;;
h ) echo $USAGE;;
\? ) echo $USAGE; exit 1;;
* ) echo $USAGE; exit 1;;
esac
done