linux - 星号 : command not found

标签 linux shell

我正在尝试运行以下脚本...

#!/bin/bash -x
ADMIN=..@.com

X='asterisk -rx "show channels" | grep -c Zap/'
if [$X -ge 4]; then
echo "Active Calls: $X" |
mail -s "Active Calls: $X" $ADMIN
fi

并得到这个错误“第 5 行:[星号:找不到命令

我对此很陌生,但我知道这可能是一个路径问题。但是,在我运行脚本的同一个目录中,我可以输入“asterisk -rx”show cha ...”命令,它工作正常。所以不明白为什么 shell 脚本不能做同样的事情? 谢谢!

最佳答案

你的问题有两个方面

  1. 这一行:X='asterisk -rx "show channel ”| grep -c Zap/'。你 想要使用命令替换 这通过 $()
  2. 这一行:if [$X -ge 4];然后[ 实际上不是语法,而是对名为 [ 的二进制文件的调用,它与 test 二进制文件相同。因此,您必须[ 之后放置一个空格,否则 shell 会像您所看到的那样报错。

.

#!/bin/sh -x
ADMIN="..@.com" # don't forget to quote this

X=$(asterisk -rx "show channels" | grep -c Zap/)
if [ "$X" -ge 4 ]; then # don't forget the spaces
  echo "Active Calls: $X" |
  mail -s "Active Calls: $X" $ADMIN
fi

请注意,如果您要使用 bash,您还不如使用它更好的语法:

#!/bin/bash -x
ADMIN="..@.com" # don't forget to quote this

X=$(asterisk -rx "show channels" | grep -c Zap/)
if ((X > 4)); then # much nicer syntax
  echo "Active Calls: $X" |
  mail -s "Active Calls: $X" $ADMIN
fi

关于linux - 星号 : command not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5265346/

相关文章:

linux - 如何使用 Azure 逻辑应用在 unix 服务器内执行 shell 脚本

linux - 从 json 文件 curl 下载 json 文件

linux - 当 FIN 被接收且套接字发送缓冲区中仍有数据时,系统会做什么?

linux - 根据性能计数器将程序分类为计算密集型

java - ADB shell 获取 Toast 消息

python - Django 时区设置更改不影响模型

linux - Raspberry PI - RT2870(内核模块 mt7601Usta)WiFi SUB dongle - 作为 WiFi 接入点

linux - Linux如何更新进程表?

bash - 如何在 bash 中跨多行拆分字符串

linux - 如何在bash中提取子字符串