Shell 脚本如果语法错误

can*_*cal 1 bash scripts

if ($(ipcs|grep test|wc -l)=630); then

echo "Shared Memory check passed"
fi
Run Code Online (Sandbox Code Playgroud)

我得到以下错误:

./Test1: line 25: 636=630: command not found
Run Code Online (Sandbox Code Playgroud)

A.B*_*.B. 7

一些语法错误

bash 中“if”结构的基础是这样的:

if [ expression ];
then
    # code if 'expression' is true.
fi
Run Code Online (Sandbox Code Playgroud)

这是更正后的版本

if [ "$(ipcs|grep test|wc -l)" -eq 630 ]; then 
    echo "Shared Memory check passed"
fi
Run Code Online (Sandbox Code Playgroud)

或 with[[…]]防止没有双引号的变量值分词

if [[ $(ipcs|grep test|wc -l) -eq 630 ]]; then 
    echo "Shared Memory check passed"
fi
Run Code Online (Sandbox Code Playgroud)

或更好

if [[ $(ipcs|grep -c test) -eq 630 ]]; then 
    echo "Shared Memory check passed"
fi
Run Code Online (Sandbox Code Playgroud)


kos*_*kos 6

基本上有多种方法可以在 中构造if条件bash;AB的回答中概述了一个;另一个可能是您尝试使用的,涉及使用双括号,这是一种以bashC 风格的方式操作表达式/变量的方法,并且根据其定义,需要在为了工作(请注意,这不适用于字符串比较):

if (($(ipcs|grep test|wc -l)==630)); then
    echo "Shared Memory check passed"
fi
Run Code Online (Sandbox Code Playgroud)

有关“双括号构造”的更多信息