Bash 'While' Loop: سبق اور مثالیں۔

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

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

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

تعارف

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

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

عمومی نحو

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

کرتے وقت

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

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

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

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

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

ہر تکرار میں، ہم چیک کر رہے ہیں کہ آیا x کی قدر 10 ہے۔ قدر کی جانچ کی جا رہی ہے پرکھ کمانڈ. [[ اظہار ]] ٹیسٹ کمانڈ کے لیے نحو ہے (دیکھیں۔ آدمی ٹیسٹ)۔ یہاں چونکہ ہم استعمال کر رہے ہیں۔ -ne آپریٹر (جس کا مطلب ہے 'not equal to')، ٹیسٹ کمانڈ 0 لوٹاتا ہے، یعنی کامیابی، اگر x کی قدر 10 نہیں ہے، اور یہ غیر صفر کی قدر لوٹاتا ہے، یعنی ناکامی اگر x کی قدر 10 ہے۔

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

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

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

z=0 گونجتے ہوئے "فائلوں کی فہرست:" ls -l [[ $z -ne 5 ]] do echo "Creating dir$z..." mkdir dir$z ((z++)) ہو گیا

پہلے احکامات بازگشت "فائلوں کی فہرست:" اور ls -l ایک بار مکمل طور پر عملدرآمد کرے گا؛ ان کی کامیابی یا ناکامی کا اس بات پر کوئی اثر نہیں پڑتا کہ لوپ کب تک چلے گا۔

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

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

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

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

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

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

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

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

x=0 جبکہ [[ $x -ne 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

نتیجہ

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