¿Cómo puedo crear un script bash que verifique si un programa ya está instalado y, si no lo está, lo instala?
Gracias por tu ayuda.
Aquí está el código que tengo hasta ahora:
#/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

/usr/bin?apt-mark showmanualluego instalar con algo comoapt-get install "$(< package.list)".Respuestas:
Puedes hacerlo:
dpkg -s <packagename> &> /dev/nullluego verifique el estado de salida. solo si el estado de salida del comando anterior era igual al
0paquete instalado .entonces:
fuente
sudo apt install $name? El comando debe pasar a la siguiente línea ... De lo contrario, buen trabajo ...dpkgsolo es relevante para los paquetes Debian instalados. En el caso particular de OP,youtube-dlpor ejemplo, también podría instalarse a través del administrador de paquetes de Pythonpipif dpkg -s “$name” &> /dev/null ; then? Mismo efecto, más limpio / más claro imo.ifhace ...Aquí hay una función que escribí para el propósito que uso en mis scripts. Comprueba si el paquete requerido está instalado y, de lo contrario, solicita al usuario que lo instale. Requiere un nombre de paquete como parámetro. Si no conoce el nombre del paquete al que pertenece un programa requerido, puede buscarlo. Información sobre eso disponible aquí.
fuente
Esta línea de comando verificará el uso del
whichprograma y regresará0si está instalado y1si no:Por supuesto, lo usará de esta manera en su script:
Un uso simple sería:
Tenga en cuenta varias cosas:
fuente
whichEs súper no portátil. Frecuentemente usocommand -ven su lugar, pero depende en gran medida del tipo de nombre que esté buscando (alias, función, ejecutable, etc.)Unix & Linuxsitio! ¡Si estuviera respondiendo en elUnix & Linuxsitio, sería un asunto diferente!¿Por qué quieres comprobarlo en primer lugar? A menos que tenga una buena razón para ello, no lo haga, solo
apt-get install packagetermine. Si ya está instalado, se actualizará si hay una versión más nueva disponible, si está instalado y está actualizado, no pasará nada. En caso de que tenga que aplicar alguna configuración, hay otras opciones, como crear un paquete de configuración que depende del paquete o usar un software de administración de configuración como ansible.fuente
Una manera fácil de verificar los paquetes instalados usando
apt-mark:apt-mark showinstallenumerará todos los paquetes marcados como instalación (ya instalados o en cola para la instalación). Después de eso, es una simple cuestión de agarrar los paquetes que le interesan.Ejemplo:
apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"fuente