Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell脚本中的条件_Shell - Fatal编程技术网

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是查找进程是

我有以下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
是查找进程是否正在运行的实用工具。如果
进程_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