我正在测试看看我的脚本的第一个参数是–foo
if [ $# > 1 ] then if [[ "$1" = "--foo" ]] then echo "foo is set" foo = 1 fi fi if [[ -n "$foo"]] then #dosomething fi
有人可以告诉我什么是bash的测试方式,如果-foo作为参数之一出现,不一定是第一个?
如果要支持长选项,则应使用外部getopt实用程序。如果您只需要支持短选项,最好使用Bash内置格式。
以下是使用getopts的示例(getopt并不是太大):
options=':q:nd:h' while getopts $options option do case $option in q ) queue=$OPTARG;; n ) execute=$FALSE; ret=$DRYRUN;; # do dry run d ) setdate=$OPTARG; echo "Not yet implemented.";; h ) error $EXIT $DRYRUN;; \? ) if (( (err & ERROPTS) != ERROPTS )) then error $NOEXIT $ERROPTS "Unknown option." fi;; * ) error $NOEXIT $ERROARG "Missing option argument.";; esac done shift $(($OPTIND - 1))
不是你的第一个测试将始终显示一个真正的结果,并将在当前目录中创建一个名为“1”的文件。你应该使用(按照优先顺序):
if (( $# > 1 ))
要么
if [[ $# -gt 1 ]]
要么
if [ $# -gt 1 ]
此外,对于作业,您不能在等号周围有空格:
foo=1