Я формирую новый вопрос, основанный на более раннем, который я разместил здесь в отношении скрипта 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;
Первая часть, которая проверяет, установлен ли пакет (если это скрипт возвращает сообщение о том, что он уже установлен), выглядит так: работает правильно. Однако здесь я сталкиваюсь с несколькими вещами, в которых не могу разобраться ... в основном потому, что я новичок.
Кто-нибудь хочет попробовать здесь и рассказать мне о моих ошибках?
Заранее спасибо: -)
сообщение о том, что пакет уже установлен, является абсолютно безусловным, оно отображается во время успешного завершения 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", избегайте их, где это не доставляет вам особых неудобств.