Bash Script Progress

Я формирую новый вопрос, основанный на более раннем, который я разместил здесь в отношении скрипта BASH, который я пишу. Это только одна из функций сценария, но я начал здесь, потому что полагал, что лучше всего справлюсь с выполнением этой функции перед другими.

К настоящему времени у меня есть код:

#!/bin/bash
clear;
welcome="- Sudo Bypass Package Installer -";
echo $welcome;
pkgFetch() {
    echo -n "Name of package you would like to install: "; read pkg
    chkPkg=$(dpkg -s $pkg|grep installed); echo "The Package [$pkg] is already installed."
if [ "" == "$chkPkg" ]; then
    echo  "The Package [$pkg] is installing..."
    sudo apt-get install $pkg -qq
    echo  "The package [$pkg] was successfully installed."
fi
echo  -n "Press ENTER to return to command-line."
};
pkgFetch;
read;
clear;

Первая часть, которая проверяет, установлен ли пакет (если это скрипт возвращает сообщение о том, что он уже установлен), выглядит так: работает правильно. Однако здесь я сталкиваюсь с несколькими вещами, в которых не могу разобраться ... в основном потому, что я новичок.

  • Если [$ pkg] не установлен, сценарий по-прежнему отображает сообщение о том, что это так, а затем сообщение, которое должно отображаться, если оно не установлено, то есть в настоящее время оно установлено. установка.
  • Скрипт не устанавливает пакет в автоматическом режиме. Он показывает, что считывает базу данных , распаковывает $ pkg , обрабатывает триггеры и настраивает $ pkg . После этого сценарий отображает правильное сообщение «Пакет [$ pkg] был успешно установлен».

Кто-нибудь хочет попробовать здесь и рассказать мне о моих ошибках?

Заранее спасибо: -)

1
задан 13 April 2017 в 15:25

1 ответ

сообщение о том, что пакет уже установлен, является абсолютно безусловным, оно отображается во время успешного завершения grep.

Вы можете добавить его к [ -n "$chkPkg" ] &&, чтобы сделать его условным (для непустой переменной chkPkg), или даже лучше вставить его в блок if следующим образом:

if [ "" == "$chkPkg" ]; then
  echo  "The Package [$pkg] is installing..."
  # ...
else
  echo "The Package [$pkg] is already installed."
fi

Кстати. Вы должны сопоставлять переменные в шеллскрипте с одним =, а не с ==. Последний не соответствует posix и не будет работать в некоторых оболочках unix, кроме bash. Такие вещи называются "bashisms", избегайте их, где это не доставляет вам особых неудобств.

0
ответ дан 13 April 2017 в 15:25

Другие вопросы по тегам:

Похожие вопросы: