Как использовать ИЛИ в (отрицательных) условиях Bash - PullRequest
2 голосов
/ 11 сентября 2011

В этом разделе моего скрипта проверяется, является ли дистрибутив Ubuntu или Arch.Проблема в том, что я не могу понять, чем заменить ИЛИ , чтобы он заработал.Я безуспешно пытался -o и другие предложения с разных сайтов.

if [ ! $(lsb_release -is) == "Ubuntu" OR "Arch" ]; then
 echo "Neither Ubuntu nor Arch!"
 read -p "Continue anyway(y/N)? "
 sleep 0
 [ "$REPLY" == "y" ] || exit
fi

Ответы [ 4 ]

5 голосов
/ 11 сентября 2011

Вы можете использовать что-то вроде:

rel="$(lsb_release -is)"
if [[ "${rel}" != "Ubuntu" && "${rel}" != "Arch" ]]; then
   # Neither Ubuntu nor Arch
fi
2 голосов
/ 12 сентября 2011

Ближайшим к вашему исходному коду будет:

if [[ ! $(lsb_release -is) =~ Ubuntu|Arch ]]; then 
    echo "Neither Ubuntu nor Arch!"
    read -p "Continue anyway(y/N)? "
    sleep 0
    [ "$REPLY" == "y" ] || exit; 
fi

При этом используется оператор сопоставления, введенный в bash 3. Также обратите внимание, что вышеприведенное действительно в bash 3.2, до этого вам необходимо использовать кавычки для шаблона.

если у вас нет bash 3, вы можете использовать grep

if ! lsb_release -is| egrep -q 'Ubuntu|Arch'; then 
    echo "Neither Ubuntu nor Arch!"
    read -p "Continue anyway(y/N)? "
    sleep 0
    [ "$REPLY" == "y" ] || exit; 
fi

Обратите внимание, что -q является нестандартной опцией grep

2 голосов
/ 11 сентября 2011

Используйте case/esac конструкцию

case $(lsb_release -is) in
  Ubuntu|Arch ) echo "Ubuntu or Arch found";;
  * ) 
 echo "Neither Ubuntu nor Arch!"
 read -p "Continue anyway(y/N)? "
 sleep 0
 [ "$REPLY" == "y" ] || exit
 ;;
esac
0 голосов
/ 11 сентября 2011

Чтобы ответить на мой собственный вопрос, вот несколько более длинный, но более гибкий способ достижения того же результата.

rel="$(lsb_release -is)"
if [[ "${rel}" = "Arch" ]]; then
    echo "It's Arch"
  elif [[ "${rel}" = "Ubuntu" ]]; then
    echo "It's Ubuntu"
  else
    echo "It's Neither"
    read -p "Continue anyway(y/N)? "
    sleep 0
    [ "$REPLY" == "y" ] || exit
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...