【问题标题】:Bash if condition to check if a ubuntu package has a newer version?Bash if 条件来检查 ubuntu 包是否有更新版本?
【发布时间】:2016-04-06 15:10:50
【问题描述】:

我需要一个 bash 行来检查 ubuntu 软件包是否需要升级。

例如,我想使用 dpkg 或 apt-get 命令检查软件包“firefox”是否需要升级。

假设示例:

# Hypothetical example pseudo-code
if [[ $(firefox_needs_upgrade) ]]; then echo "Firefox needs upgrading";fi

【问题讨论】:

    标签: linux bash apt


    【解决方案1】:

    这应该适合你:

    #!/bin/bash
    PACKAGE="firefox"
    TMP_FILE="/tmp/upgrade_list"
    
    apt-get -yqq update
    apt-get -sqq upgrade | grep Inst > ${TMP_FILE}
    grep -qi ${PACKAGE} ${TMP_FILE}
    
    if [ $? == 0 ]
    then
       echo "${PACKAGE} needs to be upgraded"
    fi
    

    【讨论】:

    • 试过了,还是不行。 apt-get -sqq upgrade ... >${TMP_FILE}" 没有向文件写入任何内容?
    • 脚本在我的 ubuntu 盒子里运行良好,你有错误信息吗?你是如何运行脚本的?
    【解决方案2】:

    以下命令会对您有所帮助:-
    /usr/lib/update-notifier/apt-check --人类可读

    cat /var/lib/update-notifier/updates-available

    更多详情,您可以查看以下链接:-

    https://askubuntu.com/questions/49958/how-to-find-the-number-of-packages-needing-update-from-the-command-line

    感谢和问候,
    阿洛克·撒克

    【讨论】:

    • 我对一个特定的包和一个 bash if 条件来处理它感兴趣。
    • 根据您提供的链接,我编写了一个 bash 函数来正确地进行检查。谢谢,这是第二个最有用的答案,我的将是第一个:)
    【解决方案3】:

    Bash 函数:

    apt_needs_upgrade() {
    
        NEEDS_UPGRADE=$(/usr/lib/update-notifier/apt-check -p 2>&1 >/dev/null | grep "^$1$" | wc -l)
    
        if [ "$NEEDS_UPGRADE" == 1 ]; then
            return 0; # 0 means true in bash!!!
        else
            return 1; # false
        fi;
    }
    

    使用它:

    if apt_needs_upgrade "firefox"; then
        echo "Needs upgrading"
    else
        echo "No need to upgrade"
    fi;
    

    【讨论】:

      【解决方案4】:

      好的,用经过测试的代码编辑了我的答案。这可能是一种更漂亮的方式:

      #retrieving info about the package
      dpkg -l $1 >/dev/null
      
      if [ $? -ne 0 ]
      then
      
       echo "$1 not installed or issue retrieving informations"
       exit
      
      else
      
       #We check if pkg is upgradable
       UPGRADABLE=$(apt-get -s upgrade -u | egrep -c "^Conf $1 |^Inst $1 ")
      
       if [ $UPGRADABLE -gt 0 ]
       then
        echo "$1 need an upgrade"
       else
        echo "$1 up to date"
       fi
      
      fi
      

      用法:

      # /tmp/check.sh openssh-server
      openssh-server need an upgrade
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关 why 和/或 如何 它回答问题的额外上下文将显着改善其长期价值。请edit您的回答添加一些解释。特别是,您应该解释为什么从apt-get 退出错误意味着需要升级,以及为什么您使用如此繁琐的表达式而不是简单的if apt-get ...;
      • 不能正常工作,会产生误报。传递“firefox”时的示例“firefox-utils”。
      • OK 已修复,在正则表达式中添加空格!
      猜你喜欢
      • 2019-06-24
      • 2021-09-14
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 2021-12-16
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多