यह ध्यान दिया जाना चाहिए कि / if...then...fi
और प्रकार के दृष्टिकोण से बाहर निकलने की स्थिति से संबंधित सौदे हम कमांड द्वारा परीक्षण करना चाहते हैं (सफलता पर 0); हालाँकि, कुछ कमांड नॉन-जीरो एग्जिट स्टेटस नहीं लौटाते हैं यदि कमांड विफल हो जाता है या इनपुट से निपट नहीं सकता है। इसका मतलब यह है कि सामान्य और / दृष्टिकोण उन विशेष कमांड के लिए काम नहीं करेंगे।&&
||
if
&&
||
उदाहरण के लिए, लिनक्स GNU पर file
अभी भी 0 के साथ बाहर निकलता है अगर इसे तर्क के रूप में एक गैर-मौजूदा फ़ाइल प्राप्त हुई और find
निर्दिष्ट फ़ाइल उपयोगकर्ता का पता नहीं लगा सका।
$ find . -name "not_existing_file"
$ echo $?
0
$ file ./not_existing_file
./not_existing_file: cannot open `./not_existing_file' (No such file or directory)
$ echo $?
0
ऐसे मामलों में, एक संभावित तरीका जिसे हम स्थिति को संभाल सकते हैं stderr
/ पढ़ सकते हैं stdin
संदेश, जैसे कि file
कमांड द्वारा लौटाए गए , या कमांड के पार्स आउटपुट जैसे find
। उस उद्देश्य के लिए, case
कथन का उपयोग किया जा सकता है।
$ file ./doesntexist | while IFS= read -r output; do
> case "$output" in
> *"No such file or directory"*) printf "%s\n" "This will show up if failed";;
> *) printf "%s\n" "This will show up if succeeded" ;;
> esac
> done
This will show up if failed
$ find . -name "doesn'texist" | if ! read IFS= out; then echo "File not found"; fi
File not found
(यह unix.stackexchange.com पर संबंधित प्रश्न पर मेरे स्वयं के उत्तर का एक भंडार है )