मैं Arturo के समाधान के निम्नलिखित संशोधन का उपयोग करता हूं:
psql -lqt | cut -d \| -f 1 | grep -qw <db_name>
यह क्या करता है
psql -l
निम्नलिखित की तरह कुछ आउटपुट:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-----------+----------+------------+------------+-----------------------
my_db | my_user | UTF8 | en_US.UTF8 | en_US.UTF8 |
postgres | postgres | LATIN1 | en_US | en_US |
template0 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
भोले दृष्टिकोण का उपयोग करने का मतलब है कि "सूची," एक्सेस "या" पंक्तियों "नामक एक डेटाबेस की खोज सफल होगी। इसलिए हम इस आउटपुट को अंतर्निहित कमांड लाइन टूल के एक गुच्छा के माध्यम से केवल पहले कॉलम में खोजते हैं।
-t
झंडा शीर्षलेख और पादलेख निकालता है:
my_db | my_user | UTF8 | en_US.UTF8 | en_US.UTF8 |
postgres | postgres | LATIN1 | en_US | en_US |
template0 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
अगले बिट, cut -d \| -f 1
ऊर्ध्वाधर पाइप |
चरित्र द्वारा आउटपुट को विभाजित करता है (बैकस्लैश के साथ शेल से बच जाता है), और फ़ील्ड 1 का चयन करता है। यह पत्ते:
my_db
postgres
template0
template1
grep -w
यदि आप temp
इस परिदृश्य में खोज कर रहे हैं तो पूरे शब्दों से मेल खाता है, और इसलिए मेल नहीं खाएगा । -q
विकल्प, किसी भी उत्पादन स्क्रीन के लिए लिखा दबा देता, इसलिए यदि आप एक कमांड प्रॉम्प्ट आप को बाहर करने के साथ हो सकता है पर सहभागी इस चलाना चाहते हैं -q
तुरंत तो कुछ प्रदर्शित किया जाता।
ध्यान दें कि grep -w
अल्फ़ान्यूमेरिक, अंकों और अंडरस्कोर से मेल खाता है, जो कि पोस्टग्रैस्कल में अनछुए डेटाबेस नामों में अनुमत वर्णों का समूह है (हाइफ़न, अनियोजित पहचानकर्ताओं में कानूनी नहीं हैं)। यदि आप अन्य वर्णों का उपयोग कर रहे हैं, grep -w
तो आपके लिए काम नहीं करेगा।
इस पूरे पाइपलाइन की निकास स्थिति 0
(सफलता) होगी यदि डेटाबेस मौजूद है या 1
(विफलता) अगर यह नहीं है। आपका शेल विशेष चर $?
को अंतिम कमांड की निकास स्थिति में सेट करेगा । आप सशर्त में सीधे स्थिति का परीक्षण कर सकते हैं:
if psql -lqt | cut -d \| -f 1 | grep -qw <db_name>; then
# database exists
# $? is 0
else
# ruh-roh
# $? is 1
fi
... | grep 0
शेल रिटर्न मान बनाने के लिए भी जोड़ सकते हैं यदि DB मौजूद नहीं है और 1 यदि ऐसा करता है; या... | grep 1
विपरीत व्यवहार के लिए