如果在外壳程序脚本中为-else,则将参数与字符串匹配


0

对于以下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

是什么原因呢?

Answers:


4

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

为了进行字符串比较,您需要[ "x" = "y" ]使用。(这是POSIX Shell语法。)

Bash语法[[ x == y ]]带有double =,但是在脚本头声明/ bin / sh时使用bashisms / kshisms 不是一个好主意。更改标头以要求Bash,或仅遵循POSIX Shell语法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.