मेरे पास लिनक्स बैश में एक SQLCMD है जो एक चयन के परिणाम प्राप्त कर रहा है, मैं प्रत्येक पंक्ति पर कैसे पुनरावृति कर सकता हूं, और विशिष्ट कॉलम चुनने में सक्षम हो सकता हूं ताकि मैं उन्हें बैश कमांड चलाने के लिए उपयोग कर सकूं

मैं वर्तमान में सीएसवी फ़ाइल में चयन और आउटपुट करता हूं, जो ठीक काम करता है, लेकिन मुझे एक ऐसा तरीका मिल जाएगा जो निर्यात नहीं करता है, क्योंकि अनुमतियां चल रही हैं, और मुझे एक स्क्रिप्ट के साथ पूरी तरह से चलाने की जरूरत है

#!/bin/bash

sqlcmd -S DB_string -d DB -U USERNAME -P PASSWORD -Q \
"SET NOCOUNT ON SELECT * FROM dbo.microiopenvpn WHERE mode='create' ORDER BY id" -o "sqloutputCheckCreate.csv" -W -w 1024 -s"," -h-1
line_no=0
file=sqloutputCheckCreate.csv
line_no=$(awk '{x++} END {print x}' $file)
echo $line_no

#rowCount= sqloutputCheckCreate.csv | wc -l

if [ $line_no > 0 ]; then
    echo "SQL Has Entries"
    while IFS="," read -r d1 d2 d3 d4 d5 d6; do

      if [ -e "/etc/openvpn/clients/$d6.ovpn" ]; then
            echo "$d6 File exists"
            sqlcmd -S DB_string -d DB -U USERNAME -P PASSWORD -Q \ -Q "SET NOCOUNT ON UPDATE dbo.microiopenvpn SET mode='valid' WHERE id='$d1'" < /dev$                echo "Database Updated - Successfully"
      else
            echo "$d6 does not exist - Action Creation Script of $d6"
            ./executecreate.sh
      fi

    done < sqloutputCheckCreate.csv    
 else
    echo "Nothing there"
  fi

cp /dev/null sqloutputCheckCreate.csv

बाहरी सीएसवी फ़ाइल में निर्यात करते समय उपरोक्त काम करता है, लेकिन मुझे एसक्यूएल निर्यात को वैरिएबल और लूप में डालने की ज़रूरत है - तो बाहरी कुछ भी नहीं - विचार?

0
James_Inger 24 जून 2019, 03:29

1 उत्तर

सबसे बढ़िया उत्तर

कुछ इस तरह:

sqlcmd ... | while IFS="," read -r d1 d2 d3 d4 d5 d6
do
    :# stuff
done

या, वैकल्पिक रूप से:

while IFS="," read -r d1 d2 d3 d4 d5 d6
do
    :# stuff
done < <(sqlcmd ...)
0
Roadowl 24 जून 2019, 03:58