shell 脚本中的 if -else,将参数与字符串匹配

shell 脚本中的 if -else,将参数与字符串匹配

对于以下 shell 脚本 -

#!/bin/sh
main_version=0
feature_version=0
patch_version=0
if [[ $1 -eq "m" ]]; then
    main_version=$((main_version+1))
fi

if [[ $1 -eq "f" ]]; then
    feature_version=$((feature_version+1))
fi

if [[ $1 -eq "p" ]]; then
    patch_version=$((patch_version+1))
fi

echo $main_version
echo $feature_version
echo $patch_version

m尽管我使用以下方法传递参数,但它仍在增加所有变量./<script-name>.sh m

这是什么原因呢?

答案1

-eq使用算术比较。Sh 算术运算将非数字操作数视为 0,因此您只需检查[[ 0 -eq 0 ]]所有三种情况。

对于字符串比较,您需要这样做[ "x" = "y" ]。(这是 POSIX shell 语法。)

Bash 语法是[[ x == y ]]使用双 =,但它是不是一个好主意在脚本头声明 /bin/sh 时使用 bashisms/kshisms。要么更改头以要求 Bash,要么仅坚持使用 POSIX shell 语法。

相关内容