shell脚本中的条件
我有以下shell脚本:shell脚本中的条件,shell,Shell,我有以下shell脚本: #!/bin/sh output=`./process_test.sh status_pid | grep "NOT STARTED: process_1" --line-buffered` if[[ -z ${output} ]] then echo "process is not running" else echo "process is running" fi 其中,/process\u test.sh status\u pid是查找进程是
#!/bin/sh
output=`./process_test.sh status_pid | grep "NOT STARTED: process_1" --line-buffered`
if[[ -z ${output} ]]
then
echo "process is not running"
else
echo "process is running"
fi
其中,/process\u test.sh status\u pid
是查找进程是否正在运行的实用工具。如果进程_1
未运行,它将给出:未启动:进程_1
。进一步的
此实用程序是完美的,没有任何问题。我怀疑问题在于if
语法
运行此脚本时,我得到以下输出:
./test.sh: line 18: if[[ -z NOT: command not found
./test.sh: line 19: syntax error near unexpected token `then'
./test.sh: line 19: `then'
您可以帮助解决此问题吗?您必须使用空格将关键字(如
if
)与参数或命令(如[
)分隔开
#!/bin/sh
output=$(./process_test.sh status_pid | grep -e "NOT STARTED: process_1" --line-buffered)
if [[ -z ${output} ]]
then
echo "process is not running"
else
echo "process is running"
fi
必须使用空格将关键字(如
if
)与参数或命令(如[[
)分隔开
#!/bin/sh
output=$(./process_test.sh status_pid | grep -e "NOT STARTED: process_1" --line-buffered)
if [[ -z ${output} ]]
then
echo "process is not running"
else
echo "process is running"
fi
你应该这样写
if [[ -z ${output} ]]
then
...
所以你错过了一个
你应该这样写
if [[ -z ${output} ]]
then
...
因此,您错过了一个
这样写会更简洁:
#!/bin/sh
if ! ./process_test.sh status_pid |
grep "NOT STARTED: process_1" > /dev/null; then
echo "process is not running"
else
echo "process is running"
fi
#!/bin/sh
如果!/process\u test.sh status\u pid|
grep“未启动:进程1”>/dev/null;然后
echo“进程未运行”
其他的
echo“进程正在运行”
fi
请注意--line buffering参数是不相关的,因为
在完成所有输入之前,管道不会完成
(好吧,这不是完全无关的——它会让
脚本运行速度慢得可以忽略不计。)
还请注意,“[]”不是标准的。根据
“在某些实现中可能被识别为(a)保留(字),导致未指定的结果”。换句话说,这就是通常所说的“bash主义”(尽管它在bash以外的shell中有效),如果您使用它,则不能使用
#!/bin/sh
作为您的解释器,而应指定#!/bin/bash
,这样写会更简洁:
#!/bin/sh
if ! ./process_test.sh status_pid |
grep "NOT STARTED: process_1" > /dev/null; then
echo "process is not running"
else
echo "process is running"
fi
#!/bin/sh
如果!/process\u test.sh status\u pid|
grep“未启动:进程1”>/dev/null;然后
echo“进程未运行”
其他的
echo“进程正在运行”
fi
请注意--line buffering参数是不相关的,因为
在完成所有输入之前,管道不会完成
(好吧,这不是完全无关的——它会让
脚本运行速度慢得可以忽略不计。)
还请注意,“[]”不是标准的。根据
“在某些实现中可能会被识别为(a)保留(word)…,导致未指定的结果”。换句话说,这就是通常所说的“bash主义”(虽然它在bash以外的shell中有效),如果使用它,则不能使用!!/bin/sh
作为解释器,而应指定#!/bin/bash