Петля, чтобы проверить, установлен ли пакет Debian или нет.

Мне нравится проверять, установлены ли несколько пакетов на Debian / Ubuntu. Вот моя попытка создать скрипт:

query=`dpkg-query -W -f '${Status}'` ok="install ok" if ! [ `$query` curl == "$ok" ] ;then apt-get -y -qq install curl >> /dev/null 2>&1 fi 

В результате

 Install: target Installed is not a directory 

но это должно быть то, что вы можете видеть во второй переменной. У меня головная боль, npw, потому что я не могу найти правильный способ справиться с этим.

  • Можете ли вы указать, был ли файл переименован?
  • Меню Bash с несколькими параметрами в одной строке
  • Сценарий Bash SFTPing на удаленный сервер и загрузка файлов, cd в соответствующий каталог на локальной машине
  • переименование каталога и его поддиректоров, не затрагивая их файлы
  • Могу ли я получить код выхода из подклассов, запущенных с помощью $ (команды)?
  • Отправить (отскочить) сообщение с вложением в mailx (или любые другие инструменты)
  • команда sed - Заменить строку в файле
  • Могу ли я сделать завиток или перезагрузить wget, если отключен?
  • 3 Solutions collect form web for “Петля, чтобы проверить, установлен ли пакет Debian или нет.”

    Кажется, вы делаете что-то ненужным образом. Почему не просто

     dpkg -l curl || apt-get -y -qq install curl > /dev/null 2>&1 

    В конце концов, вы попросили один-лайнер. Поскольку, по-видимому, все, что вам нужно, это знать, доступен ли curl , вы также можете просто сделать

     type curl >/dev/null 2>&1 || apt-get -y -qq install curl 

    В вашем коде есть две ошибки, одна серьезная – не так много:

    1. Вы используете backticks дважды. Также не используйте обратные ссылки. Используйте подстановку команд следующим образом: $(command ...)

       query=$(dpkg-query -W -f '${Status}') 

      Запрос уже будет содержать результат вызова команды. Когда вы сейчас выполняете

       `$query` 

      вы теперь попытаетесь выполнить результат, который в вашем случае является строкой, для меня это очень длинная строка, состоящая из install ok installedinstall ok installed...

    2. (Костас указал на это) Результат dpkg-query -W -f '${Status}' curl будет install ok installed , а это не то, что вы проверяете.

    Нет никакого смысла проверять, установлен ли пакет и установка, если нет. Или:

    1. Вы проверяете, что вы хотите от пакета, например, curl binary: command -v curl , чтобы пользователь мог предоставить альтернативы, если им это нравится.
    2. Вы проверяете, установлена ​​ли какая-то конкретная версия того, что вы хотели, используя что-то вроде apt-cache policy .

    Если ни один из случаев не применяется, проще установить его непосредственно.

    Linux и Unix - лучшая ОС в мире.