检查某些程序是否已安装的脚本

GUI*_*BIA 11 apt bash scripts

如何创建一个 bash 脚本来检查程序是否已安装,如果没有,则安装它?

谢谢你的帮助。

这是我到目前为止的代码:

#/bin/bash

PS3="choose an option"

select opcion in "Installing_Youtube"  "exit"

do

    case $opcion in


        "Installing_Youtube")

            youtube-dl > /usr/bin
            if [ $? -eq 127 ] ; then
                echo "installing youtube"
                 apt-get update
                 apt-get install youtube-dl
                mkdir Videos
            else
                echo "Youtube already installed"
            fi

        ;;


        "exit")
            exit
Run Code Online (Sandbox Code Playgroud)

小智 13

你可以这样做:

dpkg -s <packagename> &> /dev/null

然后检查退出状态。仅当上述命令的退出状态等于0安装的软件包时

所以:

   #!/bin/bash

    echo "enter your package name"
    read name

    dpkg -s $name &> /dev/null  

    if [ $? -ne 0 ]

        then
            echo "not installed"  
            sudo apt-get update
            sudo apt-get install $name

        else
            echo    "installed"
    fi
Run Code Online (Sandbox Code Playgroud)

  • 请注意,软件可以通过多种方式安装,并且 `dpkg` 仅与已安装的 debian 软件包相关。在 OP 的特殊情况下,例如`youtube-dl` 也可以通过 python 的包管理器 `pip` 安装 (4认同)
  • 为什么不`if dpkg -s “$name” &amp;&gt; /dev/null ; 然后`?相同的效果,更干净/更清晰的 imo。 (2认同)

Geo*_*sen 5

此行命令将检查该which程序的使用情况,并返回0是否已安装,1如果未安装:

which apache | grep -o apache > /dev/null &&  echo 0 || echo 1
Run Code Online (Sandbox Code Playgroud)

当然,您将在脚本中以这种方式使用它:

which "$1" | grep -o "$1" > /dev/null &&  echo "Installed!" || echo "Not Installed!"
Run Code Online (Sandbox Code Playgroud)

一个简单的用法是:

#!/usr/bin/env bash
set -e

function checker() { 
        which "$1" | grep -o "$1" > /dev/null &&  return 0 || return 1 
}

if checker "$1" == 0 ; then echo "Installed"; else echo "Not Installed!"; fi
Run Code Online (Sandbox Code Playgroud)

注意几件事:

  1. 安装时您必须处理依赖问题
  2. 为了避免在安装过程中与脚本交互,请参阅此处的示例。
  3. 您可以捕获该函数的返回值,并使用它来决定是否安装。