&&
ऑपरेटर का उपयोग करें ,
cmd1 && cmd2 && cmd3
शेल्स्क्रिप्टिंग में, &&
और ||
ऑपरेटरों को सी। &&
मतलब और ऑपरेटर, और ||
साधन OR में तार्किक ऑपरेटरों के अनुकूलित कार्यान्वयन के बाद मॉडलिंग की जाती है । यूनिक्स कसकर सी से संबंधित है, और सी में, तार्किक ऑपरेटरों के दूसरे ऑपरेंड का मूल्यांकन नहीं किया जाता है यदि परिणाम पहले से पहले ऑपरेंड से जाना जाता है। उदाहरण के लिए "false && x"
है false
किसी के लिए x
है, तो मूल्यांकन करने के लिए कोई जरूरत नहीं है x
(खासकर अगर x
एक समारोह कॉल है); इसी तरह के लिए "true || x"
। इसे शॉर्ट-सर्क्युटिंग शब्दार्थ भी कहा जाता है ।
और यूनिक्स में, कमांड के रिटर्न मानों को "सफल समापन" सत्य मूल्यों के रूप में व्याख्या करना पारंपरिक है: एक्जिट कोड 0 का मतलब true
(सफलता), नॉनजरो का मतलब false
(असफलता)। इसलिए, जब cmd1 && cmd2
रिटर्न में पहला कमांड "false"
(नॉनज़ेरो एग्जिट स्टेटस, जो विफलता को इंगित करता है), कंपाउंड कमांड की स्थिति ज्ञात है: विफलता। तो समग्र व्याख्या cmd1 && cmd2
हो सकती है: "निष्पादित करें cmd1
, और फिर, अगर यह विफल नहीं हुआ, cmd2
"। जो आप मूल रूप से अपने प्रश्न में चाहते हैं।
इसी तरह से OR: की cmd1 || cmd2
व्याख्या "निष्पादित cmd1
, या अगर यह विफल रहता है, cmd2
" के रूप में की जा सकती है ।
Protip: लंबी श्रृंखला के लिए &&
, set -e
अपनी स्क्रिप्ट में डालने पर विचार करें। यह मूल रूप से अर्धविराम ;
को &&
कुछ विशेष मामलों के साथ बदल देता है।