شیل کمانڈز کا استعمال کرتے ہوئے پوسٹگریس کے لئے ڈوکر امیج تخلیق کو خود کار طریقے سے کیسے بنایا جائے۔

اگر آپ کے پاس کوڈ کی ایک خاص لائن ہے جو آپ کے پروجیکٹ میں بار بار دہراتی ہے، تو اس کے لیے ایک بہت ہی معیاری حل موجود ہے۔ یہ صرف ایک فنکشن کا استعمال کر رہا ہے۔

لیکن کیا ہوگا اگر آپ کے پاس ایک ہی پروجیکٹ فائل کی ترتیبات بار بار دہرائی جائیں؟ میں اسے کیسے حل کروں؟

باش اسکرپٹنگ سے ملو۔ باش اسکرپٹس کو خود بخود سسٹم پر کمانڈز کے مخصوص سلسلے کو عمل میں لانے کے لیے لکھا جاتا ہے، بغیر صارف کو کچھ کرنے کی ضرورت ہوتی ہے۔ اسے ورک فلو آٹومیشن کہا جاتا ہے، اور یہ مضمون آپ کو سکھائے گا کہ اسے کیسے کرنا ہے۔

انڈیکس

شرطیں

اس مضمون کی پیروی کرنے کے لیے آپ کو ضرورت ہو گی:

  • Git-bash آپ کے کمپیوٹر پر انسٹال ہے۔
  • ٹرمینل یا کمانڈ پرامپٹ کا استعمال کرتے ہوئے کمانڈز کو لانچ کرنے اور اس پر عمل کرنے کا تجربہ کریں (مفید، لیکن ضرورت نہیں)۔
  • پروگرامنگ کے بنیادی تصورات (حالات اور لوپس وغیرہ) کی تفہیم
  • ڈوکر آپ کی مشین پر انسٹال ہے۔
  • ڈوکر کے تصورات کی بنیادی تفہیم (جیسے تصاویر اور کنٹینرز)
  • Postgres کے ساتھ تجربہ (اختیاری، لیکن تجویز کردہ)

اس منصوبے کی حوصلہ افزائی کیا؟

میں حال ہی میں پوسٹگریس کے لیے چند پروجیکٹس کے لیے ڈوکر امیجز ترتیب دے رہا تھا جن پر میں کام کر رہا تھا، اور میں نے دیکھا کہ تصاویر بناتے وقت میں اسی طرز پر عمل کر رہا تھا۔ فرق صرف اتنا ہے کہ ڈیٹا بیس کی اسناد اور ڈیٹا بیس کا نام مختلف ہیں۔

ہم نے یہ بھی محسوس کیا کہ آج کی بہت سی تیزی سے ترقی پذیر ایپس سوپا بیس کو اپنے پس منظر کے طور پر استعمال کرتی ہیں۔ ان میں وسائل کی حدود ہو سکتی ہیں جیسے ڈیٹا بیس اسٹوریج، بینڈوڈتھ، کنکرنٹ کنکشنز، اور API درخواست کوٹہ (سروس ٹائر اور پروجیکٹ کے سائز پر منحصر ہے)۔ اور ان مسائل کو ڈیٹا بیس ترتیب دے کر حل کیا جا سکتا ہے۔

تو، کیوں نہ ایسا CLI ٹول بنایا جائے جو پوسٹگریس کے لیے ڈاکر امیجز کی تخلیق کو خودکار کر سکے؟ اس وقت، میں نے سیکھا کہ ورک فلو آٹومیشن بنانے کے لیے قابل عمل شیل کمانڈز لکھنے کے لیے bash کا استعمال کیسے کریں۔

آپ اس گٹ ریپو میں اس گائیڈ میں استعمال شدہ کام کی مکمل مثالیں تلاش کر سکتے ہیں۔

تعارف

Bash ایک شیل اور اسکرپٹنگ زبان ہے جو کمانڈز یا اسکرپٹس کو لکھنے اور چلانے کے لیے استعمال ہوتی ہے جو آپ کے کمپیوٹر پر کام انجام دیتی ہے، بشمول ڈائریکٹریز اور فائلیں بنانا، فائلوں میں ہیرا پھیری کرنا، کاموں کو خودکار بنانا، اور نظام کے عمل کو منظم کرنا۔

اس گائیڈ میں، آپ پوسٹگریس ڈیٹا بیس کے لیے ڈاکر امیج بنانے کے عمل کو خودکار کرنے کا طریقہ سیکھیں گے تاکہ آپ کو ہر نئے پروجیکٹ کے لیے شروع سے تصویر بنانے کی ضرورت نہ ہو۔

باش اسکرپٹنگ فائل کی ترتیبات

شروع کرنے کے لیے، اپنا پسندیدہ ٹیکسٹ ایڈیٹر کھولیں اور وہاں ایک ڈائریکٹری یا فولڈر بنائیں۔ پھر، اس ڈائرکٹری کے اندر، ایکسٹینشن کے ساتھ ایک فائل بنائیں .sh.

فائل کے شروع میں، ٹائپ کریں:

#!/bin/bash

#!/bin/bash (جسے "شیبانگ” کے نام سے بھی جانا جاتا ہے) آپریٹنگ سسٹم کو باش شیل کا استعمال کرتے ہوئے اسکرپٹ چلانے کی ہدایت کرتا ہے، لہذا فائل کے اندر موجود کمانڈز کو باش/ٹرمینل کمانڈز کے طور پر عمل میں لایا جاتا ہے۔

باش میں حالات

اسکرپٹ فائل بنانے اور شیبانگ کو شامل کرنے کے بعد، آئیے اس پر ایک نظر ڈالیں کہ آیا بیانات کو bash میں کیسے استعمال کیا جاتا ہے۔

نحو ہے۔ if یہ مندرجہ ذیل ہے:

if [[ condition ]];
    then
        command to execute
fi

کہ if bash کے لیے، یہ اس سے مختلف نہیں ہے جو آپ دوسری پروگرامنگ زبانوں میں استعمال کرتے ہیں۔

  • ڈبل بریکٹ ([]) وہ حالت جو آپ چیک کرنا چاہتے ہیں اور ایک سیمی کالون (;) شامل کریں۔
  • تم ہو then جب سے if ایک اعلامیہ جو یہ بتاتا ہے کہ اگر کوئی شرط درست ہے تو اس پر عمل درآمد کیا جانا چاہیے۔
  • تم ہو fi مشروط بیان بند کریں۔

مربع بریکٹ میں شرائط لکھتے وقت، حالت سے پہلے اور بعد میں ایک جگہ چھوڑ دیں (جیسا کہ اوپر کوڈ میں دیکھا گیا ہے)۔ ان خالی جگہوں کو چھوڑنے کے نتیجے میں ایک خرابی ہوگی۔

کام کرنے کی مثال:

چونکہ ہم پوسٹگریس ڈیٹا بیس ڈوکر امیج کی تخلیق کو خودکار کر رہے ہیں، اس لیے پہلے چیک کریں کہ فائل موجود ہے اور اس میں مواد موجود ہے۔ اگر مواد ہے تو اسکرپٹ سے باہر نکلیں۔ اگر نہیں، تو آئیے اگلی اسکرپٹ کے ساتھ آگے بڑھتے ہیں۔

#!/bin/bash

if [[ -s docker-compose.yml ]];
    then
        echo "The file already exists"
        exit 0
fi

echo "Next command"

جھنڈے اگر حالات میں استعمال ہوتے ہیں۔ -s چیک کرتا ہے کہ آیا فائل موجود ہے اور اس میں مواد ہے۔ فائل فلیگ فائل کی دستیابی اور اجازتوں کو چیک کرتے ہیں اور ان میں شامل ہیں لیکن ان تک محدود نہیں ہیں:

  • -f: یہ چیک کرنے کے لیے استعمال کیا جاتا ہے کہ آیا کوئی فائل موجود ہے۔
  • -s: یہ چیک کرنے کے لیے استعمال کیا جاتا ہے کہ آیا فائل موجود ہے اور اس میں مواد ہے۔
  • -d: یہ چیک کرنے کے لیے استعمال کیا جاتا ہے کہ آیا کوئی ڈائریکٹری موجود ہے۔
  • -r: یہ چیک کرنے کے لیے استعمال کیا جاتا ہے کہ آیا فائل پڑھنے کے قابل ہے۔
  • -w: یہ چیک کرنے کے لیے استعمال کیا جاتا ہے کہ آیا فائل قابل تحریر ہے۔
  • -x: یہ چیک کرنے کے لیے استعمال کیا جاتا ہے کہ آیا کوئی فائل قابل عمل ہے۔

اسکرپٹ میں ہمارے پاس ہے۔ -s یہ چیک کرنے کے لیے کہ آیا کوئی نامزد فائل موجود ہے: docker-compose.yml یہ اس ڈائریکٹری میں موجود ہے جہاں آپ کمانڈ چلاتے ہیں۔ اگر یہ غلط ہے تو ہم echo یہ ایک کلیدی لفظ ہے جو "اگلی کمانڈ” کو پرنٹ کرتا ہے۔ اگر درست ہے تو، یہ متن پرنٹ کرتا ہے "فائل پہلے سے موجود ہے”۔

exit bash اسکرپٹنگ کے لیے ریٹرن کلیدی لفظ کے طور پر کام کرتا ہے، جہاں 0 کامیابی کے لیے استعمال ہوتا ہے اور 1 ناکامی کے لیے استعمال ہوتا ہے۔

آئیے ڈوکر کمپوز فائل بنا کر اور اسی ڈائرکٹری میں کچھ مواد شامل کرکے ان سب کی جانچ کرتے ہیں جہاں ہم bash اسکرپٹ لکھتے ہیں۔ ٹرمینل قسم میں bash name-of-file.shآپ کو ایک پیغام نظر آنا چاہئے جس میں کہا گیا ہے کہ "فائل پہلے سے موجود ہے۔”

تاہم، اگر میں فائل کے مواد کو حذف کرتا ہوں اور دوبارہ کمانڈ چلاتا ہوں، تو مجھے آؤٹ پٹ "Next command” ملتا ہے۔

باش میں فائل بنانے کا کامیاب نتیجہ

انٹرایکٹو شیل

آٹومیشن کو متحرک اور لچکدار بنانے کے لیے اسے ان پٹ کی ضرورت ہے۔ ڈیٹا بیس کے نام کی مثال دیں۔ ڈیٹا بیس کا نام ہمیشہ ایک جیسا نہیں ہوتا ہے۔ پروجیکٹ کے لحاظ سے نام بدل جاتا ہے۔

ایک نئی ڈوکر امیج بناتے وقت جو ان پٹ کو استعمال کرتے ہوئے پڑھتا ہے: read کلیدی لفظ

کام کے لحاظ سے ان پٹ کی مختلف اقسام ہیں۔ اور متوقع ان پٹ کی قسم کی وضاحت کے لیے استعمال کیے جانے والے جھنڈے ہیں، جیسے:

  • -p: صارف سے متن لکھنے کو کہیں۔
  • -s: پاس ورڈ کے لیے استعمال کیا جاتا ہے جب آپ ٹرمینل پر لکھتے وقت صارف کے ان پٹ کو چھپانا چاہتے ہیں۔
  • -a: استعمال کیا جاتا ہے جب آپ صارف سے متعدد ان پٹ پاس کرنے کی توقع کرتے ہیں یا جب آپ صارف سے ایک صف کی توقع کرتے ہیں۔

صارف کے ان پٹ کو پڑھنے کے لیے نحو ہے:

read -p 'input_label: ' variable_name

کام کرنے کی مثال:

اب آئیے ایک اسکرپٹ بناتے ہیں جو پوسٹگریس ڈیٹا بیس امیج کے بارے میں صارف کا ان پٹ وصول کرے گا جسے ہم بنانا چاہتے ہیں۔

#!/bin/bash

# database credentials
read -p 'DataBase-name(*): ' db
read -p 'DataBase-user(*): ' user
read -sp 'DataBase-password(*): ' pwd
echo
echo "your database is -> $db with a username of $user and a password of $pwd"

سکرپٹ ہے -p کو read مطلوبہ الفاظ جو متن کے تار کی نمائندگی کرتے ہیں اور -sp یہ صارف کو پوشیدہ ٹیکسٹ سٹرنگ داخل کرنے کا اشارہ کرے گا (کیونکہ -s آپ جو ٹائپ کر رہے ہیں اسے چھپاتا ہے۔)

اگر آپ استعمال نہیں کرتے ہیں۔ -p ایک ساتھ اختیارات -sصارفین کو پاس ورڈ کا اشارہ نہیں دیا جا سکتا۔ کے ساتھ -s اکیلے ان پٹ کو چھپائے گا، لیکن پرامپٹ اس وقت تک ظاہر نہیں ہوگا جب تک کہ آپ اسے استعمال کرکے پرنٹ نہ کریں: echo یا printf.

صارف کے شامل کردہ ان پٹ کو پرنٹ کرنے یا استعمال کرنے کے لیے، ڈالر کا نشان ($) استعمال کریں جس کے بعد ان پٹ کے لیے متغیر نام کا استعمال کریں جس کی آپ صارف سے توقع کرتے ہیں۔ اوپر کی مثال میں، ہم نے ڈیٹا بیس کا نام حاصل کرنے کے لیے متغیر کا نام دیا ہے۔ dbتو ہم $db صارف کی طرف سے درج ڈیٹا بیس کے نام تک رسائی حاصل کرنے کی کوشش کرتے وقت۔

اب جب آپ اسکرپٹ کو ٹرمینل میں چلاتے ہیں تو آپ کو ٹرمینل پرامپٹس کا ایک سلسلہ نظر آئے گا جو آپ کے ان پٹ کا انتظار کر رہے ہیں۔ ایک بار آباد ہونے کے بعد، ٹرمینل تمام ان پٹ اقدار کو ظاہر کرے گا۔

صارف کے ان پٹ کو حاصل کرنے اور ڈسپلے کرنے کے طریقے کے لیے آؤٹ پٹ

ان پٹ کی توثیق اور حذف کرنے کا طریقہ

آپ کو کچھ بھی کرنے سے پہلے ان پٹ کی توثیق کرنے کی بھی ضرورت ہے۔ یہ اہم ہے کیونکہ بعض اوقات اہم فیلڈز غائب ہو سکتے ہیں یا غلط طریقے سے داخل ہو سکتے ہیں۔ مثال کے طور پر، ہو سکتا ہے کہ آپ جس تصویر کو بنانا چاہتے ہیں اس کے لیے ڈیٹا بیس کا نام درج کرنا بھول گئے ہوں۔

ان پٹ کی توثیق کرتے وقت درج ذیل جھنڈوں میں سے ایک کا استعمال کریں:

  • -z: چیک کرتا ہے کہ آیا متغیر قدر خالی ہے۔
  • -n: چیک کرتا ہے کہ آیا متغیر کی قدر خالی نہیں ہے۔
  • -lt: چیک کرتا ہے کہ آیا کوئی نمبر دیے گئے نمبر سے کم ہے۔
  • -gt: چیک کریں کہ آیا کوئی نمبر دیے گئے نمبر سے بڑا ہے۔
  • -eq: چیک کرتا ہے کہ آیا دو قدریں برابر ہیں۔

آپ استعمال کر سکتے ہیں -z اگلے مرحلے پر جانے سے پہلے کسی بھی ان پٹ کو جھنڈا لگائیں جن کو غیر خالی ہونے کے لیے چیک کرنے کی ضرورت ہے۔

#!/bin/bash

# database credentials
read -p 'DataBase-name(*): ' db
if [[ -z $db ]]
    then
        echo "The database field cannot be empty!"
        exit 1
fi

read -p 'DataBase-user(*): ' user
if [[ -z $user ]]
    then
        echo "The user field cannot be empty!"
        exit 1
fi

read -sp 'DataBase-password(*): ' pwd
if [[ -z $pwd ]]
    then
        echo "The password field cannot be empty!"
        exit 1
fi

یہ اسکرپٹ آپ کو اس بات کو یقینی بنانے میں مدد کرے گا کہ کسی بھی دوسرے ان پٹ کے ساتھ آگے بڑھنے سے پہلے آپ کے پاس اپنے ڈیٹا بیس کے بارے میں تمام اہم معلومات موجود ہیں۔

پہلے سے طے شدہ

آپ کچھ فیلڈز کے لیے ڈیفالٹ ویلیوز استعمال کرنا چاہیں گے، جیسے کہ تصویر کے کنٹینر کا نام، پورٹ، یا کنٹینر والیوم۔ ان حالات میں، آپ استعمال کر سکتے ہیں: := متغیر کو ڈیفالٹ ویلیو تفویض کرنے کے لیے:

#!/bin/bash

# container information
read -p 'Container-name: ' container_name
read -p 'Container-port(if omitted, the container will use default postgresql default port of 5432): ' port
read -p 'Volume-name: ' vol_name

echo "container-name-> ${container_name:=cont_one}, port->${port:=5432}, volume_name->${vol_name:=backend_data}"

اگر آپ اسکرپٹ چلاتے ہیں اور تینوں ان پٹ کو چھوڑ دیتے ہیں، تو bash ڈیفالٹ ویلیوز کو استعمال کرے گا جو آپ نے فال بیک ویلیوز کے طور پر استعمال کی ہیں۔

متغیرات کے لیے ڈیفالٹ ویلیو سیٹ کرنے کے لیے آؤٹ پٹ

تاہم، اگر آپ اس ان پٹ کے لیے کوئی قدر پاس کرتے ہیں، تو bash فراہم کردہ قدر کا استعمال کرے گا۔ مثال کے طور پر، تینوں ان پٹ دیں اور دیکھیں کہ آپ کو کیا آؤٹ پٹ ملتا ہے۔

صارف کا ان پٹ وصول کریں اور موصول ہونے والا ان پٹ دکھائیں۔

فائلیں کیسے بنائیں اور لکھیں۔

اب جب کہ آپ جانتے ہیں کہ اپنے پوسٹگریس ڈیٹا بیس کے لیے ڈاکر امیج کیسے بنانا ہے، docker-compose.yml کنٹینر کو شروع کرنے اور روکنے کے وقت چلانے کے لیے فائل۔

باش کے پاس فائلیں بنانے کے کئی طریقے ہیں۔

  • سب سے پہلے، آپ استعمال کر سکتے ہیں: > filename. اگر فائل موجود نہیں ہے، تو یہ بنائی جائے گی۔ اگر یہ موجود ہے، تو اس کے مواد کو اوور رائٹ کر دیا جائے گا (بدل دیا جائے گا)۔
  • بھی ہے۔ >> filename: فائل میں مواد شامل کریں یا فائل بنائیں اگر یہ موجود نہیں ہے۔
  • آخر کار touch filename: اگر فائل موجود نہیں ہے تو یہ بن جائے گی۔ اگر فائل پہلے سے موجود ہے، تو اس کے مواد کو محفوظ کیا جاتا ہے اور صرف فائل کا ٹائم اسٹیمپ اپ ڈیٹ ہوتا ہے۔

استعمال کرنے کا طریقہ > فائلیں بنانے اور لکھنے کے لیے

اگر آپ ایک فائل بنانا چاہتے ہیں اور اس کے مواد کو ایک ہی وقت میں لکھنا چاہتے ہیں تو اس سے پہلے ایکو کا استعمال کرنا بہتر ہے۔ > پھر فائل کا نام درج ذیل شامل کریں:

#!/bin/bash

echo Hello> test.txt

اگر آپ ایسا کرتے ہیں۔ test.txt یہ اندرونی مواد "ہیلو” والی فائل ہے۔

استعمال کرنے کا طریقہ >> موجودہ فائل میں مواد شامل کرنے کے لیے

موجودہ فائل میں مواد شامل کرنے کے لیے، فائل کے سامنے مواد شامل کریں۔ >> پھر فائل کے نام کی پیروی کریں جہاں آپ مواد شامل کرنا چاہتے ہیں۔ آئیے ہیلو کے بعد افریقہ کو شامل کریں۔ test.txt یہ وہ فائل ہے جو پچھلی اسکرپٹ نے بنائی ہے۔

#!/bin/bash

echo Africa!>> test.txt

test.txt اب ہیلو اور افریقہ پر مشتمل ہے! ایک نئی لائن پر۔

اس علامت کا استعمال کرتے ہوئے docker-compose.yml اس فائل میں پوسٹگریس ڈیٹا بیس کی ترتیبات کے بارے میں معلومات شامل ہیں۔

#!/bin/bash

> docker-compose.yml

اور اسی طرح ڈائرکٹری میں ایک docker-compose فائل بنائی گئی ہے۔

فائل میں مختلف مواد کیسے لکھیں۔

آپ بھی استعمال کر سکتے ہیں: cat فائل میں لکھنے کے لیے کلیدی لفظ۔ عام طور پر، cat فائل کے مواد کو پڑھنے کے لیے استعمال کیا جاتا ہے۔ لیکن اگر آپ اسے یکجا کرتے ہیں۔ < and the sign for appending contents to a file >> (جس پر ہم نے ابھی بحث کی ہے) آپ جس شکل میں چاہیں فائل میں متعدد مواد شامل کر سکتے ہیں۔ نحو ہے:


# writing docker compose contents

cat <> docker-compose.yml

  # file contents
EOF

کہ < tells bash to write contents to a file until it finds the EOF keyword (end of file). Then you use >> filename فائل میں مواد شامل کریں۔ ڈوکر کمپوز سیٹ اپ کا استعمال:

#!/bin/bash

#file creation and writing
 >  docker-compose.yml

cat<>docker-compose.yml
 services:
    postgres:
        image: postgres:18-alpine
        container_name: ${container_name:= $db}

        environment:
            POSTGRES_USER: $user
            POSTGRES_PASSWORD: $pwd
            POSTGRES_database: $db

        ports:
            - ${port:=5432}:5432
        volumes:
            - ${vol_name:=database-data}:/var/postgresql

 volumes:
    ${vol_name:=database-data}:

EOF

باش دلائل اور جھنڈے

باش آرگیومنٹ آپ کو اسکرپٹ چلاتے ہوئے ایک ہی لائن پر اقدار کو منتقل کرنے کی اجازت دیتے ہیں۔ آرگیومینٹس استعمال کرنے کے لیے، اسکرپٹ کو اسی لائن پر چلاتے ہوئے قدریں شامل کریں جیسا کہ:

bash script val1 val2 

دلیل کی قدر کو پڑھنے کے لیے، ڈالر کا نشان ($) استعمال کریں جس کے بعد آپ نے ویلیو درج کی ہے (پوزیشن 0 سے نہیں بلکہ 1 سے شروع ہوتی ہے)۔

مثال میں دوسری دلیل کی قدر کے مواد کی بازگشت کے لیے، آپ استعمال کر سکتے ہیں: echo $2.

اس کو بہتر طور پر سمجھنے کے لیے، آئیے دلائل کا استعمال کرتے ہوئے ڈیٹا بیس کی اسناد کو فوری طور پر پاس کر کے ڈیٹا انٹری کے تجربے کو بڑھاتے ہیں۔

#!/bin/bash

# database credentials

if [[ -z $1 ]]; then
    read -p 'DataBase-name(*): ' db
 else
    db="$1"
fi

# database checking and validating

if [[ -z $2 ]]; then
    read -p 'DataBase-user(*): ' user
 else
    user="$2"
fi

# user checking and validating

if [[ -z $1 ]]; then
    read -sp 'DataBase-password(*): ' pwd
 else
    pwd=$3
fi

# password vaidation and checking

ٹکڑا پہلے دلائل کی موجودگی کی جانچ کرتا ہے۔ اگر کوئی قدر غائب ہے تو، قیمت درج کرنے کے لیے پرامپٹ کا استعمال کریں۔ اگر دلائل موجود ہیں تو، مخصوص ڈیٹا بیس اسناد (ڈیٹا بیس کا نام، پاس ورڈ، وغیرہ) کی نمائندگی کرنے والے متغیر کو دلیل کی قدر تفویض کرتا ہے۔ اب آپ اسکرپٹ کو دلائل کے ساتھ چلا سکتے ہیں۔

bash image.sh customers ABC-Company secret123!

مندرجہ بالا اسکرپٹ سے جو تصویر بنائی جائے گی اس میں درج ذیل ڈیٹا بیس ہے: customersصارف ABC-Companyاور پاس ورڈ ہے secret123!.

باش جھنڈے/اختیارات

اسکرپٹ میں تصویر کی تخلیق کے بارے میں معلومات کی درخواست کرنے کے لیے ایک سیکشن ہے، لیکن معلومات اختیاری ہو سکتی ہیں۔ Bash کے اختیارات/جھنڈے آپ کو کنٹینر کی معلومات کے لیے اشارہ کرنے کے مرحلے کو استعمال کرتے ہوئے چھوڑنے کی اجازت دیتے ہیں: -D اختیارات۔ یہ آپ کو اسکرپٹ کے چلنے سے پہلے بنیادی کنٹینر کی معلومات کو واضح طور پر برقرار رکھنے کی اجازت دیتا ہے۔

مثالوں میں شامل ہیں:


#!/bin/bash

while getopts "ny" options; do
	case "$options" in
		n) echo "You choose no";;
		y) echo "You choose yes";;
		*) echo "No such option/flag"; exit 1;;
    esac
done

shift $((OPTIND - 1))

مندرجہ بالا اسکرپٹ میں:

  1. جبکہ لوپ مندرجہ ذیل مدت تک چلتا رہتا ہے۔ getopts خالی نہیں ہے
  2. getopts اسکرپٹ سے آپشنز پاس ہو جاتے ہیں۔
  3. "ny" اسکرپٹ چلاتے وقت ہم صارف سے ان اختیارات کی توقع کرتے ہیں:
  4. options ایک متغیر جو "n” اور "y” کے درمیان ان پٹ کے اختیارات کو ٹریک کرتا ہے۔
  5. do لوپ شروع کرتا ہے
  6. case چیک کرتا ہے کہ آیا منتخب کردہ آپشن متعین اختیارات میں ہے یا نہیں۔ in کلیدی لفظ
  7. اس کے بعد آپ اس بات کی وضاحت کرنے کے لیے اختیارات استعمال کرتے ہیں کہ جب آپ اسکرپٹ کو کال کرتے ہیں تو کیا ہوتا ہے۔ -n یا -y آپشن ڈیفینیشن کو بند کرنے کے لیے ڈبل سیمی کالون (؛؛) استعمال کریں۔
  8. کہ * استعمال کیا جاتا ہے جب ان پٹ کے اختیارات کی وضاحت نہیں کی جاتی ہے۔
  9. esac پھر کیس بند کرو۔
  10. done لوپ کو ختم کرتا ہے تاکہ یہ ہمیشہ چلتا نہ رہے۔
  11. shift $((OPTIND - 1)) بقیہ دلائل کو بائیں طرف منتقل کرنے سے ان تنازعات سے بچنے میں مدد ملتی ہے جو اس وقت ہو سکتے ہیں جب اسکرپٹ کو بھی دلائل کی توقع ہو۔ پر پیرامیٹر کی فہرست سے جھنڈے کو مؤثر طریقے سے ہٹاتا ہے۔

اس کے بعد آپ درج ذیل صورتوں میں کنٹینر کی معلومات کی درخواست کرنے کے مرحلے کو چھوڑنے کے لیے اسکرپٹ کے نحو کو لاگو کر سکتے ہیں: -D اسکرپٹ پر عمل درآمد کے دوران ایک آپشن کے طور پر پاس کیا گیا۔


#!/bin/bash

ask_container_info=true

while getopts "D" options; do
	case "$options" in
		D) ask_container_info=false;;
		*) echo "No such option/flag"; exit 1;;
    esac
done

shift $((OPTIND - 1))

if [[ $ask_container_info == true ]]; then
	#Prompt the user to input custom container information
    read -p 'Container-name: ' container_name
    read -p 'Container-port(if omitted, the container will use default postgresql default port of 5432): ' port
    read -p 'Volume-name: ' vol_name
fi

یہاں ایک آپشن ہے، تو آپشن سیکشن میں ہے۔ D. ask_container_info سچ سے شروع ہوتا ہے۔ اس کا مطلب یہ ہے کہ اگر کوئی آپشن پاس نہیں ہوتا ہے، تو اسکرپٹ صارف کو کنٹینر کی معلومات درج کرنے کا اشارہ کرے گا۔ پھر قدر تبدیل کریں۔ ask_container_info اس صورت میں، جھوٹ -D اسکرپٹ پر عمل درآمد کے ساتھ بھیج دیا گیا۔

اسکرپٹ کو قابل عمل اور اپنے پی سی پاتھ پر دستیاب کیسے بنایا جائے۔

اگلا مرحلہ یہ ہے کہ آپ اپنے کمپیوٹر پر استعمال کرتے ہوئے کسی بھی ٹرمینل سے اسکرپٹ کو دستیاب اور قابل عمل بنائیں۔ فی الحال اسکرپٹ صرف موجودہ ڈائرکٹری میں کام کرتا ہے جو اسکرپٹ بنانے اور لکھنے کے لیے استعمال ہوتی ہے۔

پہلے اسکرپٹ فائل کو قابل عمل بنائیں اور فائل سے فائل ایکسٹینشن کو ہٹا دیں تاکہ آپ کو ہمیشہ اسکرپٹ کو اس طرح کال کرنے کی ضرورت نہ پڑے: .sh توسیع

فائل کو قابل عمل بنانے کا طریقہ

فائل کو قابل عمل بنانے کے لیے لینکس کا استعمال کریں۔ chmod حکم اس کا مطلب ہے موڈ بدلنا۔ طریقوں میں فائل کی اجازتیں شامل ہیں جیسے لکھنا، پڑھنا، اور عمل کرنا۔

chmod +x image

یہاں، x میں نے فائل کو قابل عمل بنایا اور پھر ان فائلوں کے نام درج کیے جن کو میں قابل عمل بنانا چاہتا تھا (image)۔

ڈائرکٹری میں ڈائرکٹری کیسے شامل کریں۔ system/machine سڑک

اس خصوصیت کو تمام کھلے ٹرمینلز کے لیے دستیاب کرنے کے لیے، ڈائرکٹری سے قطع نظر، آپ کو اسکرپٹ کو سسٹم پاتھ میں رجسٹر کرنا ہوگا جہاں تمام عالمی اسکرپٹ اور کمانڈز محفوظ ہیں۔

ایسا کرنے کے لیے، ڈائرکٹری میں مکمل راستہ کاپی کریں اور پھر اپنے ٹرمینل میں درج ذیل کو ٹائپ کریں:

export PATH="$PATH:"

تبدیلی آپ کی ڈائرکٹری کے ساتھ۔ یہ کمانڈ اس ٹرمینل میں اسکرپٹ ڈائرکٹری کا اضافہ کرتی ہے جس میں آپ فی الحال کام کر رہے ہیں۔ تاہم، اگر میں کسی دوسرے ٹرمینل پر جا کر اسکرپٹ کو چلانے کی کوشش کرتا ہوں تو یہ ناکام ہو جاتا ہے۔

اب ڈائرکٹری کو عالمی سطح پر ترتیب دیں تاکہ کوئی بھی ٹرمینل اسکرپٹ کو چلا سکے۔

nano ~/.bash_profile

اس کے بعد آپ کو کچھ اس طرح نظر آئے گا:

Bash پروفائلز اور ان کے مواد کے لیے نینو ایڈیٹر

اگر آپ اوپر کی تصویر کو دیکھتے ہیں، تو آپ دیکھ سکتے ہیں کہ میرے پاس فائل میں اپنا راستہ پہلے ہی بتا دیا گیا ہے (منتخب متن دیکھیں)۔

اگر یہ فائل میں نہیں ہے تو آپ اسے کاپی اور پیسٹ کر سکتے ہیں۔ export PATH="$PATH:" فائل کے اندر۔ ختم ہونے پر، اگلا دبائیں۔ Ctrl+O پھر enter محفوظ کریں۔ پھر Ctrl+x نینو ایڈیٹر کو چھوڑنے کے لیے

پھر اسکرپٹ کو وہاں شامل کرنے کے لیے کمپیوٹر پاتھ کو دوبارہ لوڈ کریں۔

source ~/.bash_profile

اس کے بعد آپ اپنے کمپیوٹر کے کسی بھی ٹرمینل سے صرف اسکرپٹ فائل کا نام استعمال کر کے اسکرپٹ چلا سکتے ہیں (فائل کا نام ہے۔ image):

ڈوکر امیج تخلیق اسکرپٹ کے لیے اسکرپٹ کے کامیاب عمل سے آؤٹ پٹ۔

نتیجہ

اس گائیڈ میں، آپ نے سیکھا کہ ورک فلو کو خودکار کرنے کے لیے اپنی اسکرپٹس کیسے بنائیں۔ ہم امید کرتے ہیں کہ اس سے آپ کو بار بار ہونے والے کاموں پر ضائع ہونے والی توانائی اور وقت کو کم کرنے میں مدد ملے گی جو اسکرپٹ کمانڈز کا استعمال کرکے خودکار ہوسکتے ہیں۔

آپ اس گٹ ریپو کے لیے اس گائیڈ میں بطور مثال استعمال ہونے والا مکمل کام کرنے والا CLI ٹول تلاش کر سکتے ہیں۔ آپ یہاں انسٹالیشن گائیڈز اور استعمال کی تجاویز تلاش کر سکتے ہیں۔ اگر آپ کو یہ کارآمد معلوم ہوتا ہے، تو براہ کرم ذخیرہ کی درجہ بندی کرنے پر غور کریں اور اسے ان ساتھیوں کے ساتھ شیئر کریں جو فائدہ اٹھا سکتے ہیں۔

شکریہ!

Scroll to Top