if ($(ipcs|grep test|wc -l)=630); then
echo "Shared Memory check passed"
fi
我收到以下错误:
./Test1: line 25: 636=630: command not found
答案1
一些语法错误
bash 中 'if' 结构的基础如下:
if [ expression ];
then
# code if 'expression' is true.
fi
这是更正后的版本
if [ "$(ipcs|grep test|wc -l)" -eq 630 ]; then
echo "Shared Memory check passed"
fi
或使用[[…]]
to 来防止不使用双引号对变量值进行分词
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
答案2
本质上,有多种方法可以构造if
条件bash
;其中一种在 AB 的答案中概述了;另一种可能是您尝试使用的,它涉及使用双括号,这是一种以bash
更像 C 风格的方式操作表达式/变量的方法,并且根据其定义,它需要双括号才能工作(请注意,例如对于字符串比较,这不起作用):
if (($(ipcs|grep test|wc -l)==630)); then
echo "Shared Memory check passed"
fi
答案3
要添加另一个选项:您可以完全省去方括号和圆括号,而是使用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 "..."