先从错误讲起,在编写群起脚本时,因为嫌弃 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 语言中判断条件符号 如 “=” 旁边都需要加空格