我希望用户在命令行输入一些东西-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
如果您希望将所有内容集中在一行上(通常会让人难以阅读):
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