मैं एक शेल में कई शर्तों को संयोजित करना चाहता हूं यदि कथन, और संयोजन को नकार दें। शर्तों के एक साधारण संयोजन के लिए मेरे पास निम्नलिखित कार्य कोड है:
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
यह ठीक काम करता है। अगर मैं इसे नकारना चाहता हूं, तो मैं निम्नलिखित कार्य कोड का उपयोग कर सकता हूं:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
यह भी उम्मीद के मुताबिक काम करता है। हालांकि, यह मेरे लिए होता है कि मुझे नहीं पता कि वास्तव में कोष्ठक वास्तव में क्या कर रहे हैं। मैं उन्हें केवल समूह बनाने के लिए उपयोग करना चाहता हूं , लेकिन क्या यह वास्तव में एक उपधारा पैदा कर रहा है? (मैं कैसे बता सकता हूं?) यदि ऐसा है, तो क्या बिना सबस्क्रिप्शन लिए शर्तों को समूहित करने का कोई तरीका है?
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fiऔर यह काम करता है। मैं हमेशा आदत के रूप में डबल-ब्रेसेस के साथ परीक्षण लिखता हूं। इसके अलावा, यह सुनिश्चित करने के लिए कि bashमैंने आगे परीक्षण नहीं किया है if /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fiऔर यह इस तरह से भी काम करता है।
[ ! -e file/. ] && [ -r file ]निर्देशिका छोड़ देंगे। आप इसे पसंद करते हैं। बेशक, यही -dकरता है।
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; thenलेकिन मैं अधिक सामान्य उत्तर चाहता हूं।