当前位置: 首页 > 知识库问答 >
问题:

找不到操作员或意外[重复]

穆阳炎
2023-03-14

首先,我想为自己在编程、编写脚本等方面是个十足的笨蛋而道歉。我有一个问题,关于我以前在旧的FreeNAS 11.1机器上运行的一些代码。在启动脚本时,我还创建了一个线程。那时我得到了帮助,我的剧本也成功了。现在我更新到FreeNAS 11.2并收到一些消息,我想知道它们出现的原因以及如何修复。

但首先是背景。我的脚本检查是否有任何客户端处于联机状态(通过ping IP地址):

#!/bin/bash

HOST1=10.10.0.100 #Client 1
HOST2=10.10.0.101 #Client 2 
HOST3=10.10.0.102 #Client 3 
HOST4=10.10.0.103 #Client 4
HOST5=10.10.0.104 #Client 5

_exit () { 
case $1 in 
1) echo „No Shutdown – At least one PC is online“ ;; 
2) echo „No PC is online – Shutdown“ ;; shutdown -p now }

#Check if IPs are online 
if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1;

#All Clients are offline, shutdown else                                                                                                                                                                                           
_exit 2 fi

剧本本身也很好。如果一个客户端联机,脚本将停止;如果所有客户端脱机,服务器将关闭。但是,当我通过Shell手动运行它时,会收到以下消息:

Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
shutdown_check.sh: -wc not found
[: -eq: unexpected operator

当我在我的旧服务器(11.1)上运行它时,我没有收到这条消息,所以对我的用户来说很有趣,为什么现在会发生。

共有1个答案

凤伟泽
2023-03-14

在上面的代码中有许多独立的、无关的bug(这使得问题“过于宽泛”而不符合站点规则;这个社区wiki答案结合了许多标记重复项的答案)。考虑下面的改写:

#!/bin/bash

hosts=(
  10.10.0.100 #Client 1
  10.10.0.101 #Client 2 
  10.10.0.102 #Client 3 
  10.10.0.103 #Client 4
  10.10.0.104 #Client 5
)

for host in "${hosts[@]}"; do
  if ping -c 1 -i 1 "$host" >/dev/null; then
    echo "No Shutdown - At least one PC ($host) is online"
    exit 0
  fi
done

echo "No PC is online - Shutdown"
shutdown -p now

那么,原始代码到底有什么问题?

  • 当你运行[$(...某物...)-eq 0]时,你只得到一个有效的test语句,如果...某物...只发出一个字作为输出。当您给grep无效语法时,它根本不会发出任何输出,因此结果是[-eq 0]。因为[不识别-eq,当不在两个独立的参数之间时,您有您的错误。
  • 如果你引用正确,如["$(...某物...)"-eq 0],那么你会有一个更有用的错误消息(类似于[ "" -eq 0]
  • 您的版本的grep不承认-wc是参数的有效组合。
  • grep的使用本身是不必要的;ping反映了退出状态的成功或失败,所以如果ping...;然后,就可以直接运行
  • 语法在其他方面也被破坏了;通过http://shellcheck.net/运行原始代码将显示它们。

 类似资料:
  • 公共类主{ } 第一天开始学习java。我面对一堵墙。我不知道为什么

  • 我计划将我们的一个Spark应用程序迁移到Apache Flink。我试图了解它的容错特性。 我执行了以下代码,我看不到Flink实际上尝试重试任何任务(或子任务)。这可能会导致我丢失数据。我该怎么做才能确保每一次失败都能被Flink所覆盖? 我希望在屏幕上多次看到抛出异常消息。但是,当我使用fixedDelayRestart时,它似乎只是忽略了此消息,并为其他消息继续。

  • 致命错误:在展开可选值时意外发现nil。 我相信这很容易修复,但我对此相当陌生--我做错了什么?

  • 这里有多个任务。其中一个任务是。我们称之为。在任务-1中,我分配一个时间戳并生成水印,我使用,其中等于2min。 下一个操作符是我窗口数据,并在上面做一些聚合,然后下沉到Kafka。让我们将这个聚合和下沉的链接任务称为。 :查看这个度量值,它告诉。 问题:当我窗口元素时,我已经分配了0允许的迟到。所以它可能掉了一些元素。但是当我查看度量时,由于windows不是一个运算符,所以没有度量可以告诉wi

  • 如何使用进行查询 我现在在Android中的代码是:

  • 我是一名学习使用jsp和Servlet构建Web应用程序的学生。一个月以来,我的Web应用程序项目一直运行良好,但今天它的行为突然变得奇怪了。当我提交jsp页面时,它无法找到我的servlet。我已经使用servlet注释来映射请求。 以下是我的JSP:- 以下是我的servlet:- 以下是我的控制台日志:-