Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Linux Bash脚本:条件表达式中的语法错误_Linux_Bash_Ubuntu - Fatal编程技术网

Linux Bash脚本:条件表达式中的语法错误

Linux Bash脚本:条件表达式中的语法错误,linux,bash,ubuntu,Linux,Bash,Ubuntu,我是新来的邻居,遇到语法错误。请看一看,也许有人可以帮忙。我正在尝试运行以下脚本: #!/bin/bash main () { dpkg -query -s $1 &> /tmp/pkg_verify if grep -q 'not installed' /tmp/verify then echo -e "\e[31m$1 is not installed. installing..\e[0m" apt-get install $1 echo -e "\e[31

我是新来的邻居,遇到语法错误。请看一看,也许有人可以帮忙。我正在尝试运行以下脚本:

#!/bin/bash

main () {
 dpkg -query -s $1 &> /tmp/pkg_verify
 if grep -q 'not installed' /tmp/verify
 then
  echo -e "\e[31m$1 is not installed. installing..\e[0m"
  apt-get install $1
  echo -e "\e[31m$1 is not installed and ready to use\e[0m"
 else
  echo -e "\e[31m$1 is already installed\e[0m"
 fi
 rm -f /tmp/pkg_verify
 for test in $@; do main $test; shift; done
 echo -e "\e[31mDone\e[0m"
}
for test in $@; do main $test; shift; done

echo -e "\e[31mDone\e[0m"
但当我尝试执行它时,我面临着无尽的循环:

grep: /tmp/verify: No such file or directory
16 is already installed
我真的试图找到答案,试图将
if
更改为两种不同的形式,但没有成功。有人知道这是为什么吗?我应该更改什么以便脚本可以运行

提前感谢所有帮助人员。

替换此行:

if [[ -z `grep 'not installed' /tmp/pkg_verify` ]]
在这种情况下:

if grep -q 'not installed' /tmp/pkg_verify
完整脚本: 替换此行:

if [[ -z `grep 'not installed' /tmp/pkg_verify` ]]
在这种情况下:

if grep -q 'not installed' /tmp/pkg_verify
完整脚本: 替换此行:

if [[ -z `grep 'not installed' /tmp/pkg_verify` ]]
在这种情况下:

if grep -q 'not installed' /tmp/pkg_verify
完整脚本: 替换此行:

if [[ -z `grep 'not installed' /tmp/pkg_verify` ]]
在这种情况下:

if grep -q 'not installed' /tmp/pkg_verify
完整脚本: 您有两个
else
紧随其后。那不行。它要么是
elif条件
,要么只是一个
else

无限循环是由
main
递归调用自身引起的

第三,当使用“$@”中的i进行
迭代时,
shift
可能是一个bug

若要调试脚本(无语法错误),请在开头附近使用
set-x

您有两个
其他
。那不行。它要么是
elif条件
,要么只是一个
else

无限循环是由
main
递归调用自身引起的

第三,当使用“$@”
中的i进行
迭代时,
shift
可能是一个bug

若要调试脚本(无语法错误),请在开头附近使用
set-x

您有两个
其他
。那不行。它要么是
elif条件
,要么只是一个
else

无限循环是由
main
递归调用自身引起的

第三,当使用“$@”
中的i进行
迭代时,
shift
可能是一个bug

若要调试脚本(无语法错误),请在开头附近使用
set-x

您有两个
其他
。那不行。它要么是
elif条件
,要么只是一个
else

无限循环是由
main
递归调用自身引起的

第三,当使用“$@”
中的i进行
迭代时,
shift
可能是一个bug



要调试脚本(无语法错误),请在开头附近使用
set-x

@nubhava感谢您的快速重播,正如您所说,我更改了if条件,当我尝试运行它时,我得到:第21行:意外toke'else'附近的语法错误第21行:“else”有idie吗?p、 你能解释一下我写的if条件有什么问题吗?你的条件的问题是,
grep
的输出中有空格,因此if条件在
-z
之后有多个参数,它只需要一个参数。在我看到完整的脚本之前,很难说代码中其他地方出现错误的原因。在问题中发布您的完整脚本,以便我检查并提出建议。@nubhave:根据您的要求,我在更改if条件后发布脚本,请检查问题。看起来您现在有2个其他块,这就是问题所在。此外,我在我的回答中发布了您的完整脚本(已修复)。@nubhava感谢您的快速重播,正如您所说,我更改了if条件,当我尝试运行它时,我得到:第21行:意外toke'else'附近的语法错误第21行:“else”有idie吗?p、 你能解释一下我写的if条件有什么问题吗?你的条件的问题是,
grep
的输出中有空格,因此if条件在
-z
之后有多个参数,它只需要一个参数。在我看到完整的脚本之前,很难说代码中其他地方出现错误的原因。在问题中发布您的完整脚本,以便我检查并提出建议。@nubhave:根据您的要求,我在更改if条件后发布脚本,请检查问题。看起来您现在有2个其他块,这就是问题所在。此外,我在我的回答中发布了您的完整脚本(已修复)。@nubhava感谢您的快速重播,正如您所说,我更改了if条件,当我尝试运行它时,我得到:第21行:意外toke'else'附近的语法错误第21行:“else”有idie吗?p、 你能解释一下我写的if条件有什么问题吗?你的条件的问题是,
grep
的输出中有空格,因此if条件在
-z
之后有多个参数,它只需要一个参数。在我看到完整的脚本之前,很难说代码中其他地方出现错误的原因。在问题中发布您的完整脚本,以便我检查并提出建议。@nubhave:根据您的要求,我在更改if条件后发布脚本,请检查问题。看起来您现在有2个其他块,这就是问题所在。此外,我在我的回答中发布了您的完整脚本(已修复)。@nubhava感谢您的快速重播,正如您所说,我更改了if条件,当我尝试运行它时,我得到:第21行:意外toke'else'附近的语法错误第21行:“else”有idie吗?p、 你能解释一下我写的if条件有什么问题吗?你的条件的问题是,
grep
的输出中有空格,因此if条件在
-z
之后有多个参数,它只需要一个参数。在我看到完整的脚本之前,很难说代码中其他地方出现错误的原因。在问题中发布您的完整脚本,以便我检查并提出建议。@nubhave:根据您的要求,我在更改if条件后发布脚本,请检查问题啊,看起来您现在有2个其他块,这就是问题所在。此外,我在我的回答中发布了您的完整脚本(已修复)。顺便说一下,您的“班次”