如何在bash脚本中的命令内使用if?

如何在bash脚本中的命令内使用if?,bash,Bash,我正在用bash编写脚本,但有一个问题: select opt in "${options[@]}" do case $opt in "1) Check Cassandra Status.") ssh skyusr@"$IP" "export JAVA_HOME=/opt/mesosphere && /var/lib/mesos/slave/slaves/*/frameworks/*/executors/*/runs/latest/apa

我正在用bash编写脚本,但有一个问题:

select opt in "${options[@]}"
do
    case $opt in
        "1) Check Cassandra Status.")
         ssh skyusr@"$IP" "export JAVA_HOME=/opt/mesosphere && /var/lib/mesos/slave/slaves/*/frameworks/*/executors/*/runs/latest/apache-cassandra-3.0.10/bin/nodetool -p 7199 status" | sed -n '6,10p' | awk '{print $1,$2}' | DN="$(grep DN)" | [[if [[!DN]]; echo "All Good" else "Node(s) "$DN" is Down" ;fi]]
            ;;
        "2) Run Repair on all nodes.")
            echo "you chose choice 2"
            ;;
        "3) Run Refresh on specific keyspace/Table.")
            echo "you chose choice 3"
            ;;
        "4) Optional")
            echo "This option disabled"
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done
它给了我

错误:第16行:[[if:未找到命令]


在我添加这个if命令之前,一切都正常。如果
$DN
为空,我需要回显一条消息,否则会回显另一条消息。

您似乎对Bash的一些基本概念感到困惑,比如管道(
)与复合命令(
if
[[
)。例如
awk'{print$1,$2}'\DN=“$(grep-DN)”
可能没有达到您的预期:

$ echo $'a\nb'
a
b

$ echo $'a\nb' | B=$(grep a)
$ echo $B
注意变量
B
如何未设置为
“a”

此外,您的语法
DN=“$(grep DN)”|[[if[[!DN]];echo“All Good”
完全是胡说八道。您最好从阅读一些介绍开始。然后您可以继续以下内容:

A=$(....)
[[ -z $A ]] && echo "A is empty"
# or
if [[ -z $A ]] then echo "A is empty"; else echo "A is not empty"; fi

您似乎对Bash的一些基本概念感到困惑,例如管道(
|
)与复合命令(
if
[
)。例如
awk'{print$1,$2}'| DN=“$(grep DN)”
可能没有达到您的预期:

$ echo $'a\nb'
a
b

$ echo $'a\nb' | B=$(grep a)
$ echo $B
注意变量
B
如何未设置为
“a”

此外,您的语法
DN=“$(grep DN)”|[[if[[!DN]];echo“All Good”
完全是胡说八道。您最好从阅读一些介绍开始。然后您可以继续以下内容:

A=$(....)
[[ -z $A ]] && echo "A is empty"
# or
if [[ -z $A ]] then echo "A is empty"; else echo "A is not empty"; fi

更改您的
if
条件,如下所示。您的
if
条件语法不正确,并且
部分也丢失。我刚刚更正了
if
条件,您需要再次检查

if [[ DN == "" ]]; then echo "All Good" else echo "Node(s) $DN is Down" ; fi

更改您的
if
条件,如下所示。您的
if
条件语法不正确,并且
部分也丢失。我刚刚更正了
if
条件,您需要再次检查

if [[ DN == "" ]]; then echo "All Good" else echo "Node(s) $DN is Down" ; fi

我知道,但我在多选项菜单中的命令行中使用它。它给了我以下错误:第16行:[[if:command not foundYep,我误读了它,删除了我的注释。您的大多数代码与最小测试用例无关()。如果您将问题编辑到mcve,您会变得更容易。即使您对代码进行了编辑,这是否仍然会导致第16行所述的错误?我看不出这种情况可能会再次出现。编辑代码段后会出现什么问题?我知道,但我正在多选择菜单的命令行中使用它。它会使e此错误:第16行:[[if:command not foundYep,我误读了它,删除了我的注释。您的大多数代码与最小测试用例无关()。如果您将问题编辑到mcve,则会更容易。即使您对代码进行了编辑,这是否仍会导致第16行中所述的错误?我看不出这种情况可能会再次出现。编辑代码段后会出现什么问题?