باش 'جب تک' لوپ: ٹیوٹوریل اور مثالیں۔

کمانڈ (ز) کو لوپ کرنے کے لیے باش اسکرپٹ میں 'تک' لوپ کا استعمال کرنا۔

Bash (Bourne Again Shell) GNU/Linux آپریٹنگ سسٹمز میں ایک شیل کمانڈ پرامپٹ اور اسکرپٹنگ زبان ہے۔ یہ زیادہ تر لینکس کی تقسیم کے لیے ڈیفالٹ شیل ہے۔

زیادہ تر اسکرپٹنگ زبانوں کی طرح، Bash اسی طرح کے کاموں کو متعدد بار دہرانے کے لیے لوپ نحو فراہم کرتا ہے۔ اس آرٹیکل میں، ہم سیکھیں گے کہ کس طرح استعمال کرنا ہے تک باش میں لوپ.

تعارف

دی تک Bash میں لوپ کا استعمال کسی اور کمانڈ (ز) (کنڈیشن کمانڈز) کے آؤٹ پٹ کی بنیاد پر متعدد بار کمانڈ (ز) (ایکسکیوٹڈ کمانڈز) پر عمل درآمد کرنے کے لیے کیا جاتا ہے۔ ایگزیکیوٹ شدہ کمانڈز اس وقت تک چلتی رہیں گی جب تک کہ کنڈیشن کمانڈ فیل ہوتی رہتی ہے (یعنی، غیر صفر کی حیثیت لوٹاتا ہے۔ لینکس میں کوئی بھی کمانڈ کامیابی کے لیے 0 اور ناکامی کے لیے غیر صفر عدد واپس کرتا ہے)۔ یہ اس کے بالکل برعکس ہے۔ جبکہ لوپ، جس میں کنڈیشن کمانڈ کامیاب ہونے تک ایگزیکیٹڈ کمانڈز چلتی رہتی ہیں۔

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

عمومی نحو

کے لیے عمومی نحو تک باش میں لوپ ہے:

جب تک نہیں ہو جاتا

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

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

آئیے چند مثالیں دیکھتے ہیں۔

ایک متغیر تک لوپنگ کی ایک خاص قدر ہے: درج ذیل لوپ متغیر کی قدر تک کام کرتا ہے۔ ایکس 10 ہے.

x=0 جب تک [[ $x -eq 10 ]] do echo $x ((x++)) ہو گیا

ہر تکرار میں، ہم چیک کر رہے ہیں کہ آیا x کی قدر 10 ہے۔ قدر کی جانچ کی جا رہی ہے پرکھ کمانڈ. [[ اظہار ]] ٹیسٹ کمانڈ کے لیے نحو ہے (دیکھیں۔ آدمی ٹیسٹ).

پھر اندر کرو... ہو گیا بلاک، ہم صرف x کی قدر پرنٹ کرتے ہیں، اور اس میں اضافہ کرتے ہیں۔ کنڈیشن کمانڈ کامیاب ہونے کے بعد لوپ باہر نکل جاتا ہے، یعنی جب $x مساوی ہے 10.

نوٹ: 'جب تک' لوپ میں استعمال ہونے والے انڈیکس متغیر کو یا تو 'تک' لوپ سے پہلے یا کنڈیشن کمانڈز میں شروع کیا جانا ہے، جیسا کہ لوپ کے برعکس، جو متغیر کو واضح طور پر شروع کرنے کے قابل بناتا ہے۔

متعدد شرط کے حکموں کے ساتھ: مندرجہ ذیل لوپ نام کی 5 ڈائریکٹریز بناتا ہے۔ dir0, dir1, ... dir4.

z=0 جب تک "Hi" کی بازگشت "Bye" [[ $z -eq 5 ]] کی بازگشت نہیں آتی ہے "Dir$z تخلیق کرنا..." mkdir dir$z ((z++)) ہو گیا

پہلی کمانڈز ایکو "ہائے" اور ایکو "بائے" ایک بار مکمل طور پر عمل میں آئیں گی۔ ان کی کامیابی یا ناکامی کا اس بات پر کوئی اثر نہیں پڑتا کہ لوپ کب تک چلے گا۔

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

توڑیں اور جاری رکھیں

مشروط اخراج کے لیے بیان کو توڑ دیں۔

ہم مشروط بیان بھی استعمال کر سکتے ہیں۔ اگر لوپ کے اندر. دی اگر بیان کو a کے ساتھ استعمال کیا جاسکتا ہے۔ توڑنا ایک بیان، لوپ سے مشروط اخراج کے لیے۔

x=0 جب تک [[ $x -eq 10 ]] کریں اگر [[ $x -eq 5 ]] بریک fi echo $x ((x++)) ہو جائے

اوپر تک کا لوپ 0 سے 4 تک کے نمبر پرنٹ کرے گا۔ پھر جب i کی ویلیو 5 ہوگی تو یہ لوپ سے باہر نکل جائے گا۔ یہ خاص طور پر مفید ہے جب ایک لوپ سے باہر نکلنا ہے جب کمانڈ ایک مخصوص آؤٹ پٹ دیتا ہے۔

مشروط طور پر تکرار کو چھوڑنے کے لیے بیان جاری رکھیں

باش میں بھی ایک ہے۔ جاری رہے ایک لوپ میں تکرار کے بقیہ حصے کو چھوڑنے کا بیان اگر کوئی خاص حالت مطمئن ہو۔

x=0 جب تک [[ $x -eq 10 ]] کریں اگر [[ $x -eq 5 ]] جاری رکھیں fi echo $x ((x++)) ہو گیا

مندرجہ بالا لوپ 0 سے 10 تک کے نمبر پرنٹ کرے گا، سوائے 5 کے، کیونکہ کے تکرار کے دوران x=5 ایک جاری بیان ہے، جو لوپ میں باقی کوڈ کو چھوڑ دے گا شروع میں تکرار کے ساتھ x=6.

لوپس کا استعمال: اسکرپٹ اور کمانڈ لائن

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

ورنہ، صارف اسے اسکرپٹ فائل میں محفوظ کرسکتا ہے اور اسکرپٹ فائل کو چلا سکتا ہے۔

دی #!/bin/bash شروع میں مترجم کی وضاحت کرتا ہے جب فائل کو عمل میں لایا جاتا ہے۔ اگرچہ باش آج کل سب سے زیادہ استعمال ہونے والا شیل ہے، لیکن کچھ صارفین شیل کو ترجیح دیتے ہیں۔ zsh، جو اس فائل کے شروع میں bash کی جگہ پر بیان کیا جانا چاہئے۔

اجازت دینے کے لیے اس فائل کے لیے چلائیں:

chmod +x test.sh

آخر میں، فائل کو چلانے کے لیے، رن:

./test.sh

نتیجہ

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