bash - 带有 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 [ ] && [ ]
解决方案
如果您使用 测试命令的结果,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
.
推荐阅读
- python - Python对一列进行分组,并从多行中详细说明另一列的最小和最大字母值
- mysql - MySQL - 通过数据透视表连接一对多并将结果分组在一行中
- asp.net - 如何将 SSO(单点登录)与角色一起使用
- excel - 如何计算目标表中的月度差异
- c++ - 反转整数的一部分(一半)的函数
- java - Java泛型方法擦除和继承
- xslt - 有没有办法从 XSLT 的特定标签内的所有标签中添加值?
- keras - keras模型在包装后未显示所有图层
- python-3.x - 字符串反转错误,因为我想让这段代码有用的方式不起作用,olone可以解决这个问题
- c++ - 编译器资源管理器和 GCC 有不同的输出