有条件地分配 var,并检查定义和条件

有条件地分配 var,并检查定义和条件

我想有条件地分配一个变量。

这不起作用

[[ -v $2]] && [$2 == "init" ] && command="./ops/init.sh"
[[ -v $2]] && [$2 == "destroy" ] && command="./ops/teardown.sh"
[ -z "${2}" ] && command="./ops/help.sh -h"

我正在尝试检查参数和另一个条件是否存在,但我无法获得正确的语法

答案1

首先-v是 zsh 扩展,所以您的问题可能只是错误的 shell 正在执行您的脚本。

编写此内容的正常方法是使用 case 语句。

case "$2" in
    ("init") command="./ops/init.sh" ;;
    ("destroy") command="./ops/teardown.sh" ;;
    ("") command="./ops/help.sh -h" ;;
    (*) echo "$0: unknown option '$2' - expecting 'init' or 'destroy'" >&2
        exit 2 ;;
esac

将多个单词放入一个字符串中并不是最好的主意,尽管./ops/help.sh -h您会逃脱它(并且最初对 shell 没有选择)。相反,请考虑使用数组。

答案2

在 shell 脚本编写中,您需要非常小心空格。您还应该知道[和之间的差异[[。如果不确定,请查阅 bash(1) 手册。我建议外壳检查检测脚本中的常见错误。在你的情况下:

#!/bin/bash
[[ -v $2 && $2 = "init" ]] && command="./ops/init.sh"
[[ -v $2 && $2 = "destroy" ]] && command="./ops/teardown.sh"
[[ -z $2 ]] && command="./ops/help.sh -h"

但正如伊卡洛斯所说,case最好有一个声明。

相关内容