Bash 脚本进度

Bash 脚本进度

我正在根据我之前发布的问题提出一个新问题这里关于我正在编写的 BASH 脚本。这只是脚本的一个功能,但我从这里开始,因为我认为完成这个功能比完成其他功能更成功。

我目前拥有的代码是:

#!/bin/bash
clear;
welcome="- Sudo Bypass Package Installer -";
echo $welcome;
pkgFetch() {
    echo -n "Name of package you would like to install: "; read pkg
    chkPkg=$(dpkg -s $pkg|grep installed); echo "The Package [$pkg] is already installed."
if [ "" == "$chkPkg" ]; then
    echo  "The Package [$pkg] is installing..."
    sudo apt-get install $pkg -qq
    echo  "The package [$pkg] was successfully installed."
fi
echo  -n "Press ENTER to return to command-line."
};
pkgFetch;
read;
clear;

第一部分检查软件包是否已安装(如果已安装,脚本将返回消息,表明软件包已安装),看起来运行正常。但是,我在这里遇到了一些我无法理解的事情……主要是因为我是新手。

  • 如果[$包]如果未安装,脚本仍会显示已安装的消息,然后显示未安装时应显示的消息,即当前正在安装。
  • 该脚本不会默默安装该软件包。它表明它是阅读数据库拆包包裹价格处理触发器, 和配置包裹价格之后,脚本显示正确的消息“该包[$包]已成功安装”。

有人愿意在这里尝试一下并告诉我我的错误吗?

提前致谢 : - )

答案1

表示该包已安装的消息是完全无条件的,无论 grep 返回成功与否都会显示。

您可以在它前面添加[ -n "$chkPkg" ] &&以使其成为条件(在非空的 chkPkg 变量上),或者更好地将它拉入 if 块中,如下所示:

如果 [ “” == “$chkPkg” ]; 然后
  echo "包 [$pkg] 正在安装..."
  # ...
别的
  echo "包 [$pkg] 已安装。"

顺便说一句。您应该使用单个 = 来匹配 shellscript 中的变量,而不是使用 ==。后者不符合 posix 标准,并且不会在除 bash 之外的一些 unix shell 中运行。这些东西被称为“bashisms”,在不会给您带来太多不便的情况下请避免使用它们。

相关内容