Eh, bu yakın, ama fi
ile if
bitirmek gerekir: Bu çeşitli varyasyonları çalıştılar.
Ayrıca, if
, yalnızca bir komut çalıştırır ve komut başarılı olursa (0 durum koduyla çıkar) koşul kodunu çalıştırır; bu, grep
yalnızca en az bir eşleşme bulduğunda yapar. Eğer çıktıyı kontrol etmek gerekmez Yani:
Eğer
-q
("sessiz") seçeneği desteklemeyen
grep
eski veya olmayan GNU versiyonu ile bir sistemde iseniz
if ls | grep -q log; then echo "there are files of type log"; fi
, sen /dev/null
etmek çıkışını yönlendirerek aynı sonucu elde edebilirsiniz: bir belirtilen dosyayı bulamazsa
if ls | grep log >/dev/null; then echo "there are files of type log"; fi
Ama ls
beri de sıfırdan farklı döndürür sen D'de olduğu gibi, hiç grep
olmadan aynı şeyi yapabilir .Shawley'nin cevabı:
if ls *log* >&/dev/null; then echo "there are files of type log"; fi
Ayrıca, hatta ls
olmadan, sadece kabuk kullanarak bunu yapabilirsiniz biraz wordier olsa: Sürece özellikle bash kullandığınız olarak
for f in *log*; do
# even if there are no matching files, the body of this loop will run once
# with $f set to the literal string "*log*", so make sure there's really
# a file there:
if [ -e "$f" ]; then
echo "there are files of type log"
break
fi
done
, bunu basitleştirmek için nullglob
seçeneğini ayarlayabilirsiniz biraz:
shopt -s nullglob
for f in *log*; do
echo "There are files of type log"
break
done
birlikte tüm bu koyarsanız
Neyse, o zaman aşağıdaki komutu ile bitirmek http://mywiki.wooledge.org/BashFAQ/004 ("Bir dizinin boş olup olmadığını nasıl kontrol edebilirim? Herhangi bir * .mpg dosyası veya ülke için nasıl denetlerim?" t kaç tane var? ") eldeki acil konuyla biraz alakalı. –