То, как я могу создать сценарий удара, который проверяет, установлена ли программа уже, и если это не, устанавливает его?
Спасибо за помощь.
Вот код, который я имею до сих пор:
#/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
можно сделать это:
dpkg -s <packagename> &> /dev/null
затем проверьте выход status.only, если статус выхода вышеупомянутой команды был равен 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
Вот функция, я записал для цели, что использую в своих сценариях. Это проверяет, чтобы видеть, установлен ли необходимый пакет и в противном случае предлагает пользователю устанавливать его. Это требует имени пакета в качестве параметра. Если Вы не знаете название пакета, необходимая программа принадлежит Вам, может искать его. Информация об этом доступном здесь.
function getreq {
dpkg-query --show "$1"
if [ "$?" = "0" ];
then
echo "$1" found
else
echo "$1" not found. Please approve installation.
sudo apt-get install "$1"
if [ "$?" = "0" ];
then echo "$1" installed successfully.
fi
fi
}
Эта строка команды проверит использование which
программа и возвратится 0
если установлено и 1
если нет:
which apache | grep -o apache > /dev/null && echo 0 || echo 1
Конечно, Вы будете использовать его этим способом в Вашем сценарии:
which "$1" | grep -o "$1" > /dev/null && echo "Installed!" || echo "Not Installed!"
Простое использование было бы:
#!/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
Примечание несколько вещей:
Почему Вы хотите проверить его во-первых? Если у Вас нет серьезного основания для него, не делайте этого, просто apt-get install package
. Если это уже установило его, будет обновлен, если будет более новая доступная версия, если это будет установлено, и это актуально, то ничего не произойдет. В случае, если у Вас есть некоторая конфигурация, которая должна быть применена, существуют другие опции, как создание пакета конфигурации, который зависит от пакета или использующий программное обеспечение управления конфигурацией как ansible.
Один простой способ проверить на установленное использование пакетов apt-mark
:
apt-mark showinstall
перечислит отмеченную установку всех пакетов (уже установленный, или поставил в очередь для установки). После этого это - простой вопрос захвата пакета (пакетов), о котором Вы заботитесь.
Пример: apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"