回声用法,如果他们没有把参数正确

时间:2011-06-03 12:14:24

标签: 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

文件名是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

4 个答案:

答案 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