2016-03-30 2 views
0

以下の2つの条件を1つのwhileループにフォーマットするには、データ入力に少なくとも1つのアルファベット文字が含まれ、ディレクトリ/ dev/nullには存在しないようにする必要があります。私はそれが2つの引数に依存するwhileループで2つの引数toformat異なる方法があります知っている Bash:これらの条件をwhileループでどのようにフォーマットするのですか?

while id -u $name 2>/dev/null>1 ; do # Checks if username already exists 
read -p "Please enter valid input: " 

#name = "test123" 
read -p "Enter you name: " name 
until [[ "$name" =~ [A-Za-z] ]]; do 
    read -p "Please enter a valid name: " name 
done 

は、しかし、私はわかりません。

私は試しにエラーが発生する可能性がありますが、このような方法で条件をフォーマットする理由を知りたいと思っています。

Bash scripting, multiple conditions in while loop

答えて

2

あなたはこのようなあなたのループを使用することができます。

while read -r -p "Please enter valid input: " name; do 
    [[ $name == *[a-zA-Z]* ]] && { id -u "$name" >/dev/null 2>&1 || break; } 
done 

echo "Got a good name: $name" 
  • readbreakがループ内で実行されるまでループキールますwhileループで使用されています。
  • $name == *[a-zA-Z]*は入力nameにアルファベットの有無をチェックします。 *はいずれの側でもグロビングするために使用されます。
  • id -uコマンドは、ユーザデータベースに入力された名前が見つかった場合は0を返し、idコマンドが失敗した場合はbreakが実行されます(ユーザ名は一意です)。
  • >/dev/null 2>&1は、idのリターンステータスのみに関心があるので、idコマンドからstdout/stderrを抑制するために使用されます。
+0

読んだ選択肢とその理由を説明してください。 – pythontamer

+0

アスタリスクはカッコの周りで何をするのですか?なぜなら、1つの条件には二重角括弧を使用し、次の条件にはカッコを使用しています。なぜあなたは '休憩'を含むのですか? (私は休憩がループを終了することを知っています) – pythontamer

+0

なぜこの方法を使用しましたか:>/dev/null 2>&1 – pythontamer

関連する問題