ユーザーがコマンド ラインで -l または -e のいずれかを入力するようにします。たとえば、 $./report.sh -e if ステートメントで決定を分割したいので、試してみました...
if [$1=="-e"]; echo "-e"; else; echo "-l"; fi
明らかにうまくいきません ありがとう
ユーザーがコマンド ラインで -l または -e のいずれかを入力するようにします。たとえば、 $./report.sh -e if ステートメントで決定を分割したいので、試してみました...
if [$1=="-e"]; echo "-e"; else; echo "-l"; fi
明らかにうまくいきません ありがとう
私が使う:
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
すべてを 1 行にまとめたい場合 (通常は読みにくくなります):
if [ "$1" = "-e" ]; then echo "-e"; else echo "-l"; fi
角かっことその中に入るものの間にはスペースが必要です。また、単一の=
. も必要ですthen
。
if [ $1 = "-e" ]
then
echo "-e"
else
echo "-l"
fi
ただし、 に固有の問題-e
は、 で特別な意味を持つecho
ため、何も返されない可能性が高いことです。試してみるとecho -e
、何も出力されませんが、期待どおりに動作します。その隣にスペースを入れるか、角かっこで囲むか、.echo -d
echo -f
-e
echo
ユーザーが送信したパラメーターを出力したいだけの場合は、単純に を使用できます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