2017-12-30 50 views
0

を見つけた私はbashで以下のループがあります。バッシュチェックは

sudo iwlist wlan0 scan | grep somewifi | while read -r line; do 

その中に「somewifi」を持つすべての無線LANをチェックし、何かをします。グレップのsomewifiが見つからない、すなわち空に出てくる場合、私はプログラムを終了するにはどうすればよい

+0

ところで、実際に存在するかどうかを確認したい場合は、一致する行を処理せずに 'sudo iwlist wlan0 scan | grep -q scanwifi ||出口1 'で十分である。 –

答えて

3
#!/usr/bin/env bash 
#    ^^^^- NOT /bin/sh 

target=somewifi 

found=0 
while read -r line; do 
    if [[ $line = *"$target"* ]]; then 
    echo "Doing something with $line" 
    found=1 
    fi 
done < <(sudo iwlist wlan0 scan) 

if ((found == 0)); then 
    echo "$target not found" >&2 
    exit 1 
fi 

私たちがここでやっているに作成されるように(メインシェルではなく、サブシェルでwhileループを実行することにより、BashFAQ #24を避けていますループをwhile readループにパイプすることによって)。これにより、終了した後も変わらないループ内の変数を設定できます。

+0

私のループ構文が良くないと言っていますか? – bakalolo

+0

状態を保持したい場合は、それは良くありません。詳細は、https://mywiki.wooledge.org/BashFAQ/024を参照してください。 –

+0

私はインターネット上で私はそれを思い付きませんでした。 – bakalolo