звездочка: команда не найдена - PullRequest
2 голосов
/ 10 марта 2011

Я пытаюсь запустить следующий скрипт ...

#!/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 ... », и она работает нормально. Поэтому не понимаю, почему скрипт оболочки не может сделать то же самое? Спасибо!

1 Ответ

2 голосов
/ 10 марта 2011

Ваша проблема двоякая

  1. Эта строка: X='asterisk -rx "show channels" | grep -c Zap/'.Вы хотите использовать подстановку команд для этого через $()
  2. Эта строка: if [$X -ge 4]; then.[ на самом деле не синтаксис, а вызов двоичного файла с именем [, который совпадает с двоичным файлом test.Для этого должен поставить пробел после [, в противном случае оболочка будет жаловаться, как вы видели.

.

#!/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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...