3

ユーザーがコマンド ラインで -l または -e のいずれかを入力するようにします。たとえば、 $./report.sh -e if ステートメントで決定を分割したいので、試してみました...

if [$1=="-e"]; echo "-e"; else; echo "-l"; fi

明らかにうまくいきません ありがとう

4

4 に答える 4

9

私が使う:

if [[ "$1" == "-e" ]]; then
    echo "-e"
else
    echo "-l";
fi

ただし、引数を解析getoptsするために、あなたの人生を楽にするかもしれません:

while getopts "el" OPTION
do
     case $OPTION in
         e)
             echo "-e"
             ;;
         l)
             echo "-l"
             ;;
     esac
done
于 2010-05-23T01:57:55.583 に答える
3

すべてを 1 行にまとめたい場合 (通常は読みにくくなります):

if [ "$1" = "-e" ]; then echo "-e"; else echo "-l"; fi
于 2010-05-23T02:02:15.017 に答える
1

角かっことその中に入るものの間にはスペースが必要です。また、単一の=. も必要ですthen

if [ $1 = "-e" ]
then
   echo "-e"
else
   echo "-l"
fi

ただし、 に固有の問題-eは、 で特別な意味を持つechoため、何も返されない可能性が高いことです。試してみるとecho -e、何も出力されませんが、期待どおりに動作します。その隣にスペースを入れるか、角かっこで囲むか、.echo -decho -f-eecho

于 2010-05-23T02:07:11.043 に答える
1

ユーザーが送信したパラメーターを出力したいだけの場合は、単純に を使用できますecho "$1"。ユーザーが何も送信していない場合にデフォルト値にフォールバックする場合は、echo "${1:--l}(:-はデフォルト値の Bash 構文です) を使用できます。ただし、非常に強力で柔軟な引数の処理が必要な場合は、以下を調べることができますgetopt

params=$(getopt --options f:v --longoptions foo:,verbose --name "my_script.sh" -- "$@")

if [ $? -ne 0 ]
then
    echo "getopt failed"
    exit 1
fi

eval set -- "$params"

while true
do
    case $1 in
        -f|--foo)
            foobar="$2"
            shift 2
            ;;
        -v|--verbose)
            verbose='--verbose'
            shift
            ;;
        --)
            while [ -n "$3" ]
            do
                targets[${#targets[*]}]="$2"
                shift
            done
            source_dir=$(readlink -fn -- "$2")
            shift 2
            break
            ;;
        *)
            echo "Unhandled parameter $1"
            exit 1
            ;;
    esac
done

if [ $# -ne 0 ]
then
    error "Extraneous parameters." "$help_info" $EX_USAGE
fi
于 2010-12-14T09:07:39.983 に答える