কোনও ফাইলের উপর ভিত্তি করে স্ক্রিপ্ট কীভাবে কার্যকর করা যায়


0

আমি এমন একটি স্ক্রিপ্ট লেখার চেষ্টা করছি যা একটি জম্প সার্ভার থেকে ওরাকেলের সাথে সংযুক্ত হবে (যেমন) আমি আমার স্ক্রিপ্টটি একটি জাম্প সার্ভার থেকে চালিত করব, আমার স্ক্রিপ্টে আমার নীচের মতো একটি কনফিগার ফাইল থাকবে

#USERNAME   PASSWORD    TNSNAMES    SUCCESS/FAIL
ODB        ODB123       ODB1        
CDC        CDC123       CDC1        

সুতরাং, এখন আমি একটি লুপে কনফিগার ফাইলটি পাস করব এবং সম্পাদন করব

${ORACLE_HOME}/bin/sqlplus -S ${USER}/${PASSWORD}@${TNSNAMES} 

সুতরাং একটি লুপে প্রথমবারের জন্য উপরের প্রশ্নটি সম্পাদন করে। উপরের ব্যবহারকারীর নাম এবং পাসওয়ার্ড ব্যবহার করে এটি সার্ভারে লগইন করার চেষ্টা করা উচিত এবং সংযোগটি সফল হয়েছে এবং সংযোগ ব্যর্থ হলে এটি configফাইলে লিখতে হবে ।PASSFAIL

#USERNAME   PASSWORD    TNSNAMES    SUCCESS/FAIL
ODB         ODB123      ODB1        PASS
CDC         CDC123      CDC1        FAIL

এবং আবার এটি আপডেট করা configফাইলটি পড়া উচিত এবং যদি এটি পাস হয় তবে এটি ডাটাবেসে প্রবেশ করা উচিত এবং আমরা যে কলটি বলি সেগুলি করতে হবে। এবং এটি ডাটাবেস উপেক্ষা করা উচিত যদি FAIL

আমি নীচের স্ক্রিপ্টটি চেষ্টা করেছি যা অন্য ফাইলগুলিতে বিষয়বস্তু লিখবে।

#!/bin/sh

. ~/.ODBenv
cat test.txt | grep '^#' > test1.txt
cat test.txt | grep -v '^#' | awk 'NF'|while read i;do
#if [ -z "$i" ]
#then
#break;
#fi
user_name=`echo $i|awk {'print $1'}`
password=`echo $i|awk {'print $2'}`
TNS_NAME=`echo $i|awk {'print $3'}`
echo "exit" | ${ORACLE_HOME}/bin/sqlplus -S  ${user_name}/${password}@${TNS_NAME} |grep -E 'ORA|SP2' > /dev/null
if [ $? -ne 0 ]
then
   echo -e "${user_name}\t      ${password}\t   ${TNS_NAME}\t   PASS">>test1.txt
else
   echo -e "${user_name}\t      ${password}\t   ${TNS_NAME}\t   FAIL">>test1.txt
fi
done
#done < test.txt|grep -v "^#" | awk "NF"

আমি একই বিষয়বস্তুকে একটি নতুন ফাইলে লেখার চেষ্টা করেছি এবং উপরের স্ক্রিপ্টটি কাজ করেছিল।

আসল ফাইলে যেমন পাস / ফেইল লিখতে হয় তার কোনও ধারণা। মূল ফাইলটি নীচে উল্লেখ করা হয়েছে।

#USERNAME   PASSWORD    TNSNAMES    SUCCESS/FAIL
ODB        ODB123       ODB1        
CDC        CDC123       CDC1        

আপডেট করা পাস / FAIL ক্ষেত্রের জন্য একই ফাইল বা নতুন ফাইল? যদি একই ফাইল: ইতিমধ্যে উপস্থিত পাস / FAIL ক্ষেত্রের সাথে স্ক্রিপ্টটি আবার কার্যকর করা হবে? এবং এতক্ষণ নিজেকে কী চেষ্টা করেছ?
ফিলিপস

যদি ওভাররাইট করা হয় বা একই ফাইলটিতে সংযুক্ত থাকে তবে খুশি। আমি এই মানগুলিকে একটি আলাদা ফাইলে রাখার চেষ্টা করেছি, এটি কাজ করেছিল। আমি এটি করতে নীচের স্ক্রিপ্টটি ব্যবহার করেছি।
সাবারিশ জ্যাকসন

`#! / বিন / শ ~ / .ओডবেনভ বিড়াল পরীক্ষা.টেক্সট | grep '^ #'> test1.txt বিড়াল টেস্ট.টেক্সট | grep -v '। #' | awk 'NF' | i পড়ার সময়; echo $i|awk {'print $1'}ব্যবহারকারীর নাম = পাসওয়ার্ড = echo $i|awk {'print $2'}TNS_NAME = echo $i|awk {'print $3'}প্রতিধ্বনি "প্রস্থান" | $ {ORACLE_Home} / bin / slplplus -S $ {user_name} / $ {পাসওয়ার্ড} @ $ {TNS_NAME} | গ্রেপ-ই 'ORA | এসপি 2'> / দেব / নাল যদি [$? -ne 0] তারপরে ইকো -e "$ {ব্যবহারকারীর নাম} \ t $ {পাসওয়ার্ড} \ t $ {TNS_NAME} P t পাস" >> টেস্ট 1.txt অন্য প্রতিধ্বনি-e "$ {ব্যবহারকারী_নাম} \ t $ {পাসওয়ার্ড} T $ {TNS_NAME} \ টি ব্যর্থ হয় ">> test1.txt ফাই সম্পন্ন`
sabarish জ্যাকসন

আমি এটি পাস / FAIL মান সহ মূল ফাইলটি ওভাররাইট করতে চাই।
সাবারিশ জ্যাকসন

প্রশ্নে আপনার স্ক্রিপ্টটি আরও ভাল রাখুন, সুতরাং এটি ফর্ম্যাট করা যায় (স্ক্রিপ্টের প্রতিটি লাইন 4 স্পেস সহ প্রেরণ করুন) এবং আপনার যে সমস্যাটি ছিল তা পরিষ্কার করুন: সমস্ত ভেরিয়েবলগুলি সঠিকভাবে সেট করা ছিল? ডাটাবেস সংযোগ সফল হয়েছে? ফাইলটি কি উদ্দেশ্য ছাড়া অন্য লেখা ছিল?
ফিলিপস

উত্তর:


0

সুতরাং এটি ঠিক জায়গায় সম্পাদনা সম্পর্কে। আমি এটির sed -iজন্য পছন্দ করি :

tail -n+2 test.txt|while read -r line ; do
  user_name=`echo "$line"|cut -d\  -f 1`
  password=`echo $line|cut -d\  -f 2`
  TNS_NAME=`echo $line|cut -d\  -f 3`
  echo "exit" | ${ORACLE_HOME}/bin/sqlplus -S ${user_name}/${password}@${TNS_NAME} |grep -E 'ORA|SP2' > /dev/null
  if [ $? -ne 0 ]; then
    result=PASS
  else
    result=FAIL
  fi
  sed -i -E "/$line/s/\t*FAIL|\t*PASS|$/$result/" test.txt
done

সুতরাং, $lineপ্রদত্তের জন্য আমি কোনও অনুসরণযোগ্য PASSবা FAILএটির ট্যাবটি সরিয়ে ফেলছি এবং এটি দ্বারা প্রতিস্থাপন করব $result। আশা করি এটা তোমার জন্য কাজ করবে।


হাই @ ফিলিপস আমি আপনার স্ক্রিপ্টটি কার্যকর করার চেষ্টা করেছি, তবে এটিতে কোনও পরিবর্তন হয়নি test.txt। এখানে কোন পরামর্শ? এবং আমার শেখানো হল প্রাথমিকভাবে test.txtফাইলে কোনও পাস বা ব্যর্থতা থাকতে পারে । আমাদের ফলাফলের উপর ভিত্তি করে প্রতিটি লাইনের শেষ কলামে অ্যাপেন্ড PASS বা FAIL যুক্ত করতে হবে।
সাবারিশ জ্যাকসন

না, |$শাখাটি যদি থাকে PASSবা না থাকে তবে কাজ করে FAIL। আমি এটি পরীক্ষা করে দিয়েছিলাম যদি এটি তাদের সাথে কাজ করে না, তারা সম্ভবত কোনও ট্যাব দ্বারা পৃথক নয়, সুতরাং আমরা তার \s*পরিবর্তে ব্যবহার \tকরতে পারি, তবে কেন প্রথম দফায় এটি ব্যর্থ হওয়া উচিত তা আমি বুঝতে পারি না। sedসমস্যাটি কোথায় তা জানতে প্রথমে স্ক্রিপ্ট ছাড়াই চেষ্টা করুন ।
ফিলিপস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.