加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在bash中测试命令行参数

发布时间:2020-12-15 19:23:01 所属栏目:安全 来源:网络整理
导读:我正在测试看看我的脚本的第一个参数是–foo if [ $# 1 ]then if [[ "$1" = "--foo" ]] then echo "foo is set" foo = 1 fifiif [[ -n "$foo"]]then #dosomethingfi 有人可以告诉我什么是bash的测试方式,如果-foo作为参数之一出现,不一定是第一个? 如果要
我正在测试看看我的脚本的第一个参数是–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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读