linux - Bash 脚本 : Syntax error in conditional expression

标签 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[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 更改为几种不同的形式,但没有成功。有谁知道这是为什么?我应该更改什么以使脚本可以运行?

提前感谢所有帮助者。

最佳答案

你有两个 else 彼此跟随。那是行不通的。它要么是 elif 条件,要么只是一个 else

死循环是由main递归调用自身造成的。

第三,当使用 for i in "$@" 进行迭代时,shift 可能是一个错误。

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

关于linux - Bash 脚本 : Syntax error in conditional expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20609971/

相关文章:

linux - 在 initramfs 中使用 perl 重定向系统调用的输出

python - 恢复已删除但正在运行 python 脚本

linux - linux : send() 套接字编程

ubuntu - 在 Nginx 中运行 PHP -/run 中缺少 PHP 目录 - ubuntu

java - 遇到 java.net.bindexception 无法分配请求地址的问题

bash - 测试服务器和客户端

linux - 如何使用 grep 或 awk 查找字符串及其值

java - 检查 Java 是否安装了 Bash

php - 如何安装pear pecl package trader?

ubuntu - 无法使用 localhost :8080/nifi 连接到 Nifi