2017-12-30 9 views
0

을 발견 나는 떠들썩한 파티에서 다음 루프가 :배쉬 검사

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

거기에 "somewifi"모든 와이파이 확인하고 뭔가. 은 grep 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