检查命令行参数是否存在

时间:2016-01-10 19:59:05

标签: linux bash shell scripting getopts

我创建了一个包含1个必需参数的shell脚本。我想要它,以便脚本只有在存在1个参数时才会运行,否则它将退出。

这是我的代码:

#!/bin/bash

branch=stable

# Custom options/arguments
usage() { # usage code }

while getopts ":bs:" opt; do
    case $opt in
        b)
            branch=development
            ;;
        s)
            site=${OPTARG}
            ;;
        *)
            usage
            ;;
    esac
done

shift $((OPTIND-1))

if [ -z "${s}" ]; then
    echo "
        $(tput setaf 1)ERROR:
        =========================$(tput sgr0)
        $(tput setaf 6)No website name provided:
            Format: <example.com>$(tput sgr0)
    "
    exit 1;
fi

# Rest of the code to run when there are no errors - not putting here as it's irrelevant

所以我希望,当我运行sudo ./nginx-install.sh时,它会看到没有参数并显示错误信息 - 这就是。但是,当我sudo ./nginx-install.sh -s example.com时,我只是再次收到错误消息,而我真的希望剩下的代码能够运行。

有人能指出我在代码中出错的地方吗?我是bash脚本的新手,所以主要是在谷歌搜索上寻求帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

您将值分配给$site,而不是$s。变量$s一直保持为空。

答案 1 :(得分:0)

您的问题与此问题重复。答案也应该满足你的问题。

Checking for the correct number of arguments