باش 'فور' لوپ: سبق اور مثالیں۔

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

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

تعارف

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

عمومی نحو

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

کرنے کے لئے ... ... مکمل

یہاں، دی ایک باش متغیر ہے، جس کا ایک درست لینکس شیل متغیر نام ہونا چاہیے، یعنی نام میں حروف (az، AZ)، نمبرز (0-9) اور انڈر سکور ( _ ) کا مجموعہ ہونا چاہیے اور اس کا آغاز کسی حرف یا سے ہونا چاہیے۔ ایک انڈر سکور.

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

جو بھی حکم (حکموں) کو عمل میں لانا ہے اسے اندر رکھنا ضروری ہے۔ کرو... ہو گیا بلاک

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

عددی اقدار کی ایک رینج پر لوپ کرنا: درج ذیل کوڈ dir1، dir2، dir3 سے dir10 تک ڈائریکٹریز بناتا ہے۔

کے لیے میں {1..10} میں mkdir dir$i کر چکا ہوں۔

مقررہ اقدار کی فہرست پر لوپنگ: درج ذیل کوڈ دی گئی فکسڈ لسٹ میں ہر اسٹرنگ یا انٹیجر کو پرنٹ کرتا ہے۔

میرے لیے ہیلو 1 2 3 الوداع! ایکو کرو $i ہو گیا

کمانڈ کے آؤٹ پٹ پر لوپنگ: مندرجہ ذیل کوڈ کی آؤٹ پٹ پر لوپ ہو جاتا ہے۔ ls اور دیے گئے فارمیٹ میں ہر فائل کا نام پرنٹ کرتا ہے۔

کے لیے i `ls` میں ایکو کرتے ہیں "فائل کا نام $i ہے" ہو گیا۔

اظہار پر مبنی نحو

سی پروگرامنگ زبان کی طرح ایک اظہار پر مبنی نحو باش میں بھی ممکن ہے:

کے لیے ((اظہار 1؛ اظہار 2؛ اظہار 3)) do ... ... مکمل ہوا۔

یہاں، اظہار 1 انڈیکس متغیر کی ابتداء ہے۔ اظہار 2 وہ حالت ہے جب لوپ سے باہر نکلنا ضروری ہے۔ اس حالت کو ہر تکرار میں چیک کیا جاتا ہے۔ اظہار 3 انڈیکس متغیر کی قدر میں اضافہ/کمی/ترمیم کی وضاحت کرتا ہے

مندرجہ ذیل مثال صرف 0 سے 4 تک اقدار پرنٹ کرتی ہے:

کے لیے ((i=0;i<5;i++)) do echo $i done

مندرجہ ذیل مثال ایک لامحدود لوپ بناتی ہے، کیونکہ کوئی اظہار بیان نہیں کیا جا رہا ہے:

کے لیے (( ; ; )) ایکو کریں "روکنے کے لیے Ctrl-C دبائیں" ہو گیا۔

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

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

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

((i=0;i<10;i++)) کے لیے اگر [[ $i -eq 5 ]] کریں تو بریک else echo $i؛ فائی ہو گیا

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

فائل کے لیے `ls` do flen=`wc -c $file` اگر [[ "$flen" = "0 $file" ]] تو echo "$file خالی ہے" بریک ورنہ echo $flen fi مکمل ہو گیا 

حکم wc -c فائل میں لائنوں کی تعداد پرنٹ کرتا ہے۔ . یہ اسے فارمیٹ میں پرنٹ کرتا ہے۔ ، مثال کے طور پر، 10 test.txt. جب لائنوں کی تعداد 0 ہو، یعنی ایک خالی فائل ہو تو ہم لوپ سے باہر نکل رہے ہیں۔

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

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

((i=0;i<10;i++)) کے لیے اگر [[ $i -eq 5 ]] کریں تو fi echo $i کو جاری رکھیں؛ ہو گیا

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

درج ذیل مثال میں، ہم ایک فائل میں لائنوں کی تعداد پرنٹ کرتے ہیں، اور ایک خاص تکرار ہوگی۔ جاری رہے اگر یہ ڈائریکٹری ہے نہ کہ فائل۔

فائل کے لیے `ls` میں کریں اگر [[ -d $file ]] تو پھر جاری رکھیں fi wc -c "$file" ہو گیا

[[ -d $file ]] چیک کرتا ہے کہ آیا فائل ایک ڈائریکٹری ہے۔ اگر یہ ہے، تو ہم اگلی فائل پر جائیں، یعنی اگلی تکرار۔ اگر یہ ڈائرکٹری نہیں ہے، تو ہم فائل میں لائنوں کی تعداد پرنٹ کرتے ہیں۔ ڈبلیو سی کمانڈ، جیسا کہ پہلے بھی دکھایا گیا ہے۔

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

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

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

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

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

chmod +x test.sh

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

./test.sh

نتیجہ

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