我是附近的新人,遇到语法错误。请看一下,也许有人可以提供帮助。我正在尝试运行以下脚本:
#!/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/