2011-09-11 14 views
2

このスクリプトのセクションでは、ディストリビューションがUbuntuかArchのどちらであるかを確認します。問題は、私がまたはを置き換えるべきものを理解することができないことです。私は-oを試してみました。ORを(負の)Bash条件内で使用する方法

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 

答えて

5

あなたが好きなものを使用することができます。自分の質問に答えるために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 
2

、ここで同じことを達成するための少し長いが、より柔軟な方法であります結果。

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 
0

を使用

rel="$(lsb_release -is)" 
if [[ "${rel}" != "Ubuntu" && "${rel}" != "Arch" ]]; then 
    # Neither Ubuntu nor Arch 
fi 
+0

の非標準オプションは-qであることを

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 

注意をgrep検索使用することができますbashの3を持っていない場合は、あまりにも、あなたは 'case'を使用します。 – tripleee

1

あなたの元のコードに最も近い次のようになります。

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で有効であることに注意して、その前に、あなたが使用する必要がありますパターンの引用符。

あなたはここではgrep

関連する問題