ठीक है, कि पास है, लेकिन आप fi
साथ if
खत्म करने के लिए की जरूरत है।
इसके अलावा, if
बस एक आदेश चलाता है और आदेश सफल होता है (स्थिति कोड 0 से बाहर निकलता है), जो grep
केवल तभी होता है जब इसे कम से कम एक मैच मिल जाए। आप उत्पादन की जांच की जरूरत नहीं है तो:
if ls | grep -q log; then echo "there are files of type log"; fi
आप grep
के एक पुराने या गैर जीएनयू संस्करण के साथ एक प्रणाली है कि -q
("शांत") विकल्प का समर्थन नहीं करता पर हैं, तो आप /dev/null
को इसके उत्पादन पुनः निर्देशित द्वारा एक ही परिणाम प्राप्त कर सकते हैं:
if ls | grep log >/dev/null; then echo "there are files of type log"; fi
लेकिन ls
के बाद भी अशून्य रिटर्न अगर यह एक निर्दिष्ट फ़ाइल नहीं मिल रहा है, तो आप बिल्कुल grep
बिना एक ही बात कर सकते हैं डी में के रूप में .Sawley का जवाब:
if ls *log* >&/dev/null; then echo "there are files of type log"; fi
तुम भी भी ls
के बिना, केवल खोल का उपयोग कर ऐसा कर सकते हैं, हालांकि यह थोड़ा wordier है: जब तक आप पार्टी विशेष रूप से उपयोग कर रहे हैं के रूप में
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
, आपको लगता है कि आसान बनाने के लिए nullglob
विकल्प सेट कर सकते हैं कुछ हद तक:
shopt -s nullglob
for f in *log*; do
echo "There are files of type log"
break
done
स्रोत
2012-04-29 14:00:06
वैसे भी, अगर तुम यह सब एक साथ रखा, तो आप निम्न आदेश के साथ समाप्त http://mywiki.wooledge.org/BashFAQ/004 ("मैं कैसे जांच सकता हूं कि कोई निर्देशिका खाली है या नहीं? मैं किसी भी * .mpg फ़ाइलों या देश की जांच कैसे करूं टी कितने हैं? ") हाथ में तत्काल मुद्दे के लिए कुछ हद तक प्रासंगिक है। –