Да / Нет сценария оболочки вызывает "== Да" l oop? - PullRequest
0 голосов
/ 21 марта 2020

Я создаю сценарий оболочки для автоматического выполнения sudo apt update / upgrade / autoremove / autoclean (первый bash сценарий в моей жизни), все работает, но раздел да или нет

Вот мой код :

#!/bin/bash
echo "Updating and upgrading system components"
sudo apt update 
sudo apt upgrade
echo "Starting cleaning and removing unnecessary files"
sudo apt autoremove
sudo apt autoclean
echo "Do you want to check if a new distribution update is available? Y/N"
read -p "Check system distribution updates?" answer
if ["$answer" == "Y" || "$answer" == "Yes" || "$answer" == "y" || "$answer" == "yes"]
then
    sudo do-release-upgrade
else 
    exit
fi

После ответа на один из этих вариантов оболочка начинает печатать в l oop "== Да"

Есть идеи?

1 Ответ

2 голосов
/ 21 марта 2020

[ необходимо отделить пробелами от аргументов. ["$answer" анализируется как одна команда с двумя аргументами, == и Y. Такой команды не существует, поэтому она терпит неудачу, и || пытается выполнить следующую команду. Следующая команда - yes: это команда, которая печатает свои аргументы бесконечно. Аргументы в этом случае: == и Yes.

. Правильный способ записи условия:

if [ "$answer" == "Y" ] || [ "$answer" == "Yes" ] || [ "$answer" == "y" ] || [ "$answer" == "yes" ]

или

if [ "$answer" == "Y" -o "$answer" == "Yes" -o "$answer" == "y" -o "$answer" == "yes" ]

или, если вы используете bash

if [[ $answer == Y || $answer == Yes || $answer == y || $answer == yes ]]

Вы также можете использовать расширение параметров, чтобы ввести ответ в нижнем регистре (но он включает yEs et c. среди принятых ответов)

if [[ ${answer,} == y || ${answer,,} == yes ]]

Или вы можете использовать регулярное выражение с оператором =~

if [[ ${answer,,} =~ ^y(es)?$ ]]

В shopt -s extglob вы можете использовать шаблон для сопоставления обоих случаев в одном выражении:

if [[ ${answer,,} == y?(es) ]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...