首页 > 解决方案 > 带有 if 条件和运算符的 Bash 脚本

问题描述

我用 if-else 条件和“and”运算符创建了 bash 脚本

if [ ps aux | grep -v 'grep --color=auto' ] && [ ps aux | grep '/usr/jdk64/jdk1.8.0_112/bin/java -Dproc_balanicer' ] ; then

   echo "HDFS BALANCER IS ALREADY RUNNING with PID"
   ps aux | grep '/usr/jdk64/jdk1.8.0_112/bin/java -Dproc_balancer' | tail -1 | awk '{print $2}'

else

   echo "kinit to HDFS"
   kinit -kt /etc/security/keytabs/hdfs.headless.keytab hdfs-kubpom@TAP.TRUE.TH
   hdfs dfsadmin -setBalancerbandwidth $1
   nodhup hdfs balancer > /tmp/hdfs-balancer-out_$(NOW).log 2> /tmp/hdfs-balancer-debug_$(NOW).log &

fi

但它总是返回

line 5: [: missing `]'
grep: ]: No such file or directory

我不知道我的 bash 出了什么问题我到目前为止尝试过的是

- if [[ -a ]]
- if { [ ] }
- if [ ] && [ ]

标签: bashshell

解决方案


如果您使用 测试命令的结果,if则不要将其放入[命令中。[用于执行字符串和数字测试。

if ps aux | grep -v 'grep --color=auto' && ps aux | grep '/usr/jdk64/jdk1.8.0_112/bin/java -Dproc_balanicer'
then

您可能想要使用pgrep命令而不是ps | grep.


推荐阅读