एक निष्पादित कमांड के परिणाम से एक बयान कैसे करें


54

मैं एक निष्पादित कमोड के आउटपुट से एक IF स्टेटमेंट करने का प्रयास कर रहा हूं। यहां बताया गया है कि मैं इसे कैसे करने की कोशिश कर रहा हूं, लेकिन यह काम नहीं करता है। क्या किसी को ऐसा करने का सही तरीका पता है?

if [ "`netstat -lnp | grep ':8080'`" == *java* ]; then
  echo "Found a Tomcat!"
fi

जवाबों:


65

बैश [[सशर्त निर्माण का उपयोग करें और $(<कमांड> )कमांड प्रतिस्थापन कन्वेंशन को प्राथमिकता दें । इसके अतिरिक्त, [[चर मानों के शब्द विभाजन को रोकता है इसलिए कमांड प्रतिस्थापन बिट को उद्धृत करने की आवश्यकता नहीं है।

if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
  echo "Found a Tomcat!"
fi

30

एक अन्य विकल्प केवल grepअपने आप से बाहर निकलने की स्थिति का परीक्षण करना है, जो झूठी (1) वापस कर देगा यदि कोई मैच नहीं था और सही (0) अगर कोई था, तो [कमांड का उपयोग नहीं करके ।

if netstat -lntp | grep ':8080.*java' > /dev/null; then
    echo "Found a Tomcat!"
fi

/ Dev / null को पुनर्निर्देशन इसे स्क्रीन पर मिली लाइन को प्रिंट करने से रोकने के लिए है।


12
-q/ Dev / null को पुनर्निर्देशित करने के बजाय grep के विकल्प पर ध्यान दें । साथ -q, grep कुछ भी आउटपुट नहीं करता है और पहले मैच के बाद खोजना बंद कर देता है।
स्टीफन चेजेलस

5

और भी सरल,

netstat -lntp | grep ':8080.*java' > /dev/null && command

अगर आप सिर्फ एक काम करना चाहते हैं।


4

आप अधिक सटीक, फिर भी सरल, जाग के साथ मेल कर सकते हैं।

if netstat -lnp | awk '$4 ~ /:8080$/ && $7 ~ /java/ {exit(0)} END {exit(1)}'; then 

अपने कमांड की संरचना को और अधिक बारीकी से मिलान करने के लिए, शेल में स्ट्रिंग पर मेल खाते वाइल्डकार्ड करने का पोर्टेबल तरीका caseनिर्माण के साथ है ।

case "$(netstat -lnp | grep ':8080')" in
  *java*)  echo "Found a Tomcat!";;
esac

0

एक और वास्तविक दुनिया उदाहरण :)

if [[ $(HEAD mycompany-intranet.com | grep '200\ OK' | wc -l) = "1" ]];  then
    echo doing some intranet settings (proxy, etc)
else
    echo doing some work-at-home settings (proxy, etc)
fi

क्या करता HEADहै? क्या यह एक कस्टम फ़ंक्शन या आपके सिस्टम पर अन्य नाम है?
luckman212

usr/bin/HEAD → lwp-request। और lwp-request यह एक प्रतीत होता है । निश्चित नहीं है, मैं इसे कैसे आया (मैन्युअल रूप से निश्चित रूप से नहीं), अगर यह डिफ़ॉल्ट रूप से वहाँ है। एक लोअरकेस के usr/bin/head रूप में अच्छी तरह से प्रतीत होता है ।
फ्रैंक नॉक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.