Linux shell 中(()) [] [[ ]] 的使用

先从错误讲起,在编写群起脚本时,因为嫌弃 shell 的 [ ] 麻烦,所以想用(( ))来代替

#!/bin/bash
if (($#==0))
then
echo "no parameters!"
 exit;
fi
if (($1 == "start"));then

    echo $1
     for i in hadoop102 hadoop103 
       do
       echo "111"
       ssh $i  "nohup  ${FLUME_HOME}/bin/flume-ng agent -c ${FLUME_HOME}/conf/ -n a1 -f ${FLUME_HOME}/conf/f1.conf -Dflume.rootogger=INFO,LOGFILE > /home/guigu/flume.log 2>&1 &"
      done
elif (($1 == "stop"));then 
    for i in hadoop102 hadoop103 
    do
    echo "222"
    ssh $i "ps aux | grep f1.conf | grep -v grep | awk '{print $2}' | xargs kill"
     done
else 
    echo 请输入单个start或stop参数!
fi

结果运行完发现  不管输入参数是否为 start,都会进入第一个条件里,说明语法出了错,根据大佬博客https://blog.csdn.net/taiyang1987912/article/details/39551385?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task的说法,才知道错在了哪里

https://www.cnblogs.com/cangqinglang/p/11778988.html

https://www.cnblogs.com/fcing/p/9382418.html

所以来简单总结下(())   [  ]   [[  ]] 的区别

1、[  ] 

最常规的格式,使用时俩边需要加空格,大于,小于这种符号需要转义

2、((   ))

针对数字的豪华升级版,俩边可以不加空格,也无需转义,但是 不能用于字符串比较

3、[[  ]]

针对字符串的豪华升级版,需要加空格,无需转义

 注意: Shell 语言中判断条件符号 如 “=” 旁边都需要加空格

原文地址:https://www.cnblogs.com/yangxusun9/p/12592077.html