【问题标题】:Two "if" conditions in the same time同时出现两个“if”条件
【发布时间】:2018-04-27 09:11:51
【问题描述】:

我正在编写一个脚本,通过 ssh 在多选菜单中为我带来来自其他节点的数据,我想根据这些数据显示一条消息。

if [[ "$option" == "1" ]]
then
  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}' | grep DN > $file_name
  if [ -s $file_name ]
  then
    echo "All Cassandra Nodes are UP !"
  else cat "$file_name"
  fi
fi

当我执行脚本时,我看到它没有看到第二个 if 条件来显示消息。

正确的语法是什么?

【问题讨论】:

  • 你如何“看到它没有看到第二个 if 条件”?你试过用set -xv 运行它吗?

标签: bash if-statement choice


【解决方案1】:

据我所知,语法没有问题。您可能想对间距等做一些事情以增强可读性,但就是这样。

我假设 file_name 设置在这部分之前的某个位置,就像选项一样。

如果事情没有按照您的预期工作,您可以添加一些用于调试目的的语句,稍后您必须将其删除。例如,在这种情况下,我想查看ssh 的输出并添加一些回显以查看流控制:

if [[ "$option" == "1" ]] ; then
    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" > tempfile
    cat tempfile |
      sed -n '6,10p' |
      awk '{print $1,$2}' |
      grep DN > "$file_name"
    if [ -s "$file_name" ] ; then
        echo "All Cassandra Nodes are UP !"
    else
        echo "$file_name is not empty"
        cat "$file_name"
    fi
fi

您可以使用tempfile 来验证您的sedawkgrep 组合是否正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多