如何制作bash脚本以检查程序或库是否存在

时间:2018-08-09 14:13:38

标签: bash ubuntu debian

我想提供一个功能来检查程序或库是否已安装。

那就是我现在要做的:

dpkg --status software-properties-common | grep -q not-installed
if [ $? -eq 0 ]; then
    sudo apt-get install -y software-properties-common
fi

我想要什么:

isPackageNotInstalled() {???} 

if [ $(isPackageNotInstalled 'software-properties-common') ]; then 
   sudo apt-get install -y software-properties-common
fi

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

我看到dpkg --status有多个返回值,这些返回值可能暗示了部分安装或挂起的软件包。我的想法是使用它的返回码,而不是检查任何特定的文本。全面披露-我现在无法使用实际的dpkg尝试此操作,但可以快速尝试一下。...

因此,一个简单的命令:

if ! (dpkg --status "..." &>/dev/null); then ...

或更简单地说:

dpkg --status "..." &>/dev/null || sudo apt-get ...

并将其放入函数中

function isPackageNotInstalled() { ! dpkg --status "$1" &>/dev/null }

然后使用它:

if isPackageNotInstalled "..."; then ...

或者如上所述:

isPackageNotInstalled "..." && sudo apt-get ...

希望这会有所帮助。

答案 1 :(得分:0)

示例脚本,其中包括用于检查和安装缺少的软件包的功能:

#!/bin/bash

isPackageNotInstalled() {

    dpkg --status $1 &> /dev/null
    if [ $? -eq 0 ]; then
    echo "$1: Already installed"
    else
    sudo apt-get install -y $1
    fi
    }

isPackageNotInstalled $1

将其另存为script,用法为./script package_name

man dpkg

EXIT STATUS
       0      The requested action was successfully performed.  Or a check  or
              assertion command returned true.

       1      A check or assertion command returned false.

       2      Fatal  or unrecoverable error due to invalid command-line usage,
              or interactions  with  the  system,  such  as  accesses  to  the
              database, memory allocations, etc.

答案 2 :(得分:0)

基于已经选择的答案,该脚本也可以在#archlinux中使用。

isPackageNotInstalled() {

    pacman -Ss $1 &&> /dev/null
    if [ $? -eq 0 ]; then
    echo "$1: Already installed"
    else
    sudo pacman -S $1
    fi
    }

isPackageNotInstalled $1

对于你来说

isPackageNotInstalled() {

    yaourt -Ss $1 &&> /dev/null
    if [ $? -eq 0 ]; then
    echo "$1: Already installed"
    else
    yaourt -S $1
    fi
    }

isPackageNotInstalled $1