if ($(ipcs|grep test|wc -l)=630); then
echo "Shared Memory check passed"
fi
Я получаю ниже ошибку:
./Test1: line 25: 636=630: command not found
Добавить другую опцию: можно покончить с квадратными скобками и круглыми скобками в целом при помощи test
встроенный вместо этого:
if test $(ipcs|grep test|wc -l) -eq 630; then
echo "Shared Memory check passed"
fi
[
встроенный по существу псевдоним для test
встроенный, за исключением того, что требуется один дополнительный аргумент: ]
.
Это также иллюстрирует что [
не часть if
оператор. Встроенное [
и двоичный файл /usr/bin/[
просто команды как любой другой, например. ls
или grep
.
if
оператор выполняет команду (команды) между if
и then
. Если последний имеет код выхода 0
, это выполняет команды после then
. [
управляйте выходами с 0
если его аргументы - который это интерпретирует как логическое выражение согласно определенным синтаксическим правилам - оценивают к истинному.
На самом деле Вы могли устранить if
в целом и использование только [
команда, как в идиоматическом:
[ $(ipcs|grep test|wc -l) -ne 630 ] || echo "..."
Некоторые синтаксические ошибки
основа для, 'если' конструкции в ударе это:
if [ expression ];
then
# code if 'expression' is true.
fi
<час> вот исправленная версия
if [ "$(ipcs|grep test|wc -l)" -eq 630 ]; then
echo "Shared Memory check passed"
fi
, или с [[…]]
к предотвращает разделение слова значений переменных без кавычек douple
if [[ $(ipcs|grep test|wc -l) -eq 630 ]]; then
echo "Shared Memory check passed"
fi
или лучше
if [[ $(ipcs|grep -c test) -eq 630 ]]; then
echo "Shared Memory check passed"
fi
По существу существует несколько способов создать if
условные выражения в bash
; каждый обрисован в общих чертах в ответе A.B.'s; другой, который вероятен тот, который Вы пытаетесь использовать, включает использование двойные круглые скобки, который является способом управлять выражениями / переменные в bash
в больше C-стиля путь, и который, на его определение, требует двойных круглых скобок для работы (ум, что это не будет работать, например, на сравнения строк):
if (($(ipcs|grep test|wc -l)==630)); then
echo "Shared Memory check passed"
fi