لینکس میں لوپس کے لئے بش کے بارے میں آپ کو جاننے کی ہر چیز۔

لینکس میں لوپس کے لئے بش کے بارے میں آپ کو جاننے کی ہر چیز۔

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





لینکس اور میک سسٹم ایڈمنسٹریٹر عام طور پر ٹرمینل کے ذریعے اسکرپٹنگ سے واقف ہوتے ہیں ، لیکن یہاں تک کہ ونڈوز صارفین بھی کر سکتے ہیں۔ لینکس کے لیے ونڈوز سب سسٹم کے ساتھ عمل کریں۔ .





باش سکرپٹ کیسے کام کرتے ہیں۔

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





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

سب سے پہلے ، درج ذیل فائل کو کسی مناسب جگہ پر بنائیں (مثالی طور پر ، ایک ٹرمینل کھولیں اور پہلے مطلوبہ ڈائریکٹری پر جائیں):



#!/bin/bash
echo 'Hello, World'

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

$ chmod +x hello_world.sh
$ ./hello_world.sh

کی chmod پہلی لائن پر کمانڈ فائل کو قابل عمل بناتی ہے ، یعنی دوسری لائن کی طرح اس کا نام ٹائپ کرکے چلایا جاسکتا ہے۔





اگر آپ دیکھتے ہیں کہ ہیلو ، ورلڈ آپ کے ٹرمینل میں ایک لائن پر چھپی ہوئی دکھائی دیتی ہے ، تو ہر چیز ضرورت کے مطابق کام کر رہی ہے۔

لوپس کیسے کام کرتے ہیں۔

عام پروگرامنگ میں ، لوپ کے لیے دو اہم اقسام ہیں: عددی اور ہر ایک کے لئے . عددی قسم روایتی طور پر سب سے عام ہے ، لیکن بش کے استعمال میں ، یہ عام طور پر دوسرا راستہ ہے۔





لوپس کے لئے عددی عام طور پر ایک واحد عدد پر توجہ مرکوز کرتا ہے جو اس بات کا تعین کرتا ہے کہ کتنے تکرار کئے جائیں گے ، مثال کے طور پر:

for (i = 0; i <100; i++) {
/* statements to execute repeatedly */
}

یہ لوپ کے لیے ایک واقف نظر ہے جو بالکل 100 بار تکرار کرے گا ، جب تک کہ میں لوپ کے اندر تبدیل نہ ہو ، یا کوئی دوسرا بیان for for لوپ کو روکنے کا سبب بنتا ہے۔

اس کے برعکس Foreach loops ، ڈھانچے جیسے فہرستوں یا صفوں پر کام کرنے کا رجحان رکھتے ہیں ، اور اس مجموعہ میں موجود ہر شے کے لیے اعادہ کرتے ہیں:

people = [ 'Peter', 'Paul', 'Mary' ]
foreach (people as person) {
if (person == 'Paul') {
...
}
}

کچھ زبانیں تھوڑا سا مختلف نحو استعمال کرتی ہیں جو مجموعہ اور آئٹم کی ترتیب کو تبدیل کرتی ہیں۔

people = [ 'Peter', 'Paul', 'Mary' ]
for (person in people) {
if (person == 'Paul') {
...
}
}

لوپس کے لیے۔

بش میں ، foreach — یا اندر کےلئے لوپ زیادہ عام ہے۔ بنیادی نحو ہے ، صرف:

for arg in [list]
do
/* statements to execute repeatedly */
/* the value of arg can be obtained using $arg */
done

مثال کے طور پر ، تین واضح طور پر نامزد فائلوں کے ذریعے اعادہ کرنا:

بدقسمتی سے اینڈروئیڈ کا عمل اکور رک گیا ہے۔
for file in one.c two.c three.c
do
ls '$file'
done

اگر اس طرح کی فائلیں موجودہ ڈائریکٹری میں موجود ہیں تو ، اس اسکرپٹ سے آؤٹ پٹ ہوگی:

one.c
two.c
three.c

فائلوں کے ایک مقررہ سیٹ کے بجائے ، فہرست ایک گلوب پیٹرن کے ذریعے حاصل کی جا سکتی ہے (ایک وائلڈ کارڈ سمیت - دوسرے کرداروں کی نمائندگی کرنے والے خصوصی حروف)۔ مندرجہ ذیل مثال میں ، for لوپ تمام فائلوں (موجودہ ڈائرکٹری میں) میں تکرار کرتا ہے جن کے نام '.xml' پر ختم ہوتے ہیں۔

for file in *.xml
do
ls -l '$file'
done

یہاں کچھ مثال کی پیداوار ہے:

$ -rw-r--r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r--r-- 1 bobby staff 6447 27 Oct 16:24 sitemap.xml

یہ بہت دور سے چلنے والے طریقے کی طرح نظر آسکتا ہے:

$ ls -l *.xml

لیکن ایک اہم فرق ہے: for لوپ عملدرآمد کرتا ہے۔ ایل ایس پروگرام 2 الگ الگ اوقات ، ایک فائل کا نام ہر بار اس کے پاس جاتا ہے۔ علیحدہ ایل ایس مثال میں ، گلوب پیٹرن (*.xml) پہلے فائل کے ناموں سے مماثل ہوتا ہے اور پھر ان سب کو انفرادی کمانڈ لائن پیرامیٹرز کے طور پر ایک مثال پر بھیجتا ہے ایل ایس .

یہاں ایک مثال ہے جو استعمال کرتی ہے۔ wc فرق کو زیادہ واضح کرنے کے لیے (لفظ شمار) پروگرام:

$ wc -l *.xml
44 feed.xml
231 sitemap.xml
275 total

کی wc پروگرام ہر فائل میں لائنوں کی تعداد کو الگ الگ شمار کرتا ہے ، پھر ان سب میں کل گنتی پرنٹ کرتا ہے۔ اس کے برعکس ، اگر wc لوپ کے اندر کام کرتا ہے:

for file in *.xml
do
wc -l $file
done

آپ اب بھی ہر فائل کی گنتی دیکھیں گے:

44 feed.xml
231 sitemap.xml

لیکن مجموعی طور پر کوئی خلاصہ نہیں ہے کیونکہ۔ wc تنہائی میں چلایا جاتا ہے ، ہر بار جب لوپ تکرار کرتا ہے۔

جب فہرست فہرست نہیں ہوتی۔

لوپس کے ساتھ نمٹنے کے وقت ایک بہت ہی آسان اور عام غلطی ہے ، جس طرح bash حوالہ کردہ دلائل/ڈوروں کو سنبھالتا ہے۔ فائلوں کی فہرست کے ذریعے لوپنگ اس طرح کی جانی چاہئے:

for file in one.c two.c

اس طرح نہیں:

for file in 'one.c two.c'

دوسری مثال فائل کے ناموں کو ڈبل کوٹس میں شامل کرتی ہے جس کے نتیجے میں صرف ایک پیرامیٹر والی فہرست ہوتی ہے۔ for لوپ صرف ایک بار عمل کرے گا۔ ایسے معاملات میں متغیر کا استعمال کرکے اس مسئلے سے بچا جاسکتا ہے:

FILES='one.c two.c'
for file in $FILES
do
...
done

نوٹ کریں کہ متغیر اعلان خود کو اس کی قیمت کو ڈبل حوالوں میں بند کرنے کی ضرورت ہے!

وائی ​​فائی منسلک ہے لیکن انٹرنیٹ تک رسائی نہیں ہے ونڈوز 7۔

بغیر کسی فہرست کے۔

تکرار کے بغیر کچھ بھی نہیں ، ایک لوپ کام کرتا ہے جو بھی کمانڈ لائن دلائل اسکرپٹ کو فراہم کیے جانے پر فراہم کیے جاتے ہیں۔ مثال کے طور پر ، اگر آپ کے پاس اسکرپٹ کا نام ہے۔ args.sh مندرجہ ذیل پر مشتمل:

#!/bin/sh
for a
do
echo $a
done

پھر args.sh پر عمل کرنا آپ کو درج ذیل دے گا:

$ ./args.sh one two three
one
two
three

بش اس کیس کو پہچانتا ہے اور علاج کرتا ہے۔ کرنے کے لیے کے برابر کے طور پر $@ میں کرنے کے لیے۔ جہاں $ command ایک خاص متغیر ہے جو کمانڈ لائن دلائل کی نمائندگی کرتا ہے۔

لوپ کے لیے روایتی عددی تقلید

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

for (( i=1; i<=5; i++ ))
do
echo $i
done

یہ کلاسک شکل ہے جس کے تین حصے ہیں:

  1. ایک متغیر کا آغاز ہوتا ہے (i = 1) جب لوپ کا سامنا ہوتا ہے۔
  2. لوپ تب تک جاری رہتا ہے جب تک حالت (i<=5) is true
  3. ہر بار لوپ کے آس پاس ، متغیر میں اضافہ ہوتا ہے (i ++)

دو اقدار کے درمیان تکرار ایک عام کافی ضرورت ہے کہ ایک چھوٹا ، قدرے کم الجھا ہوا متبادل ہے:

for i in {1..5}
do
echo $i
done

تسمہ کی توسیع جو مؤثر طریقے سے اوپر کی لوپ کے لیے ترجمہ کرتی ہے:

for i in 1 2 3 4

بریک اور جاری رکھنے کے ساتھ فائنر لوپ کنٹرول۔

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

#!/bin/bash
for file in *
do
if [ ! -f '$file' ]
then
echo '$file is not a file'
continue
fi
num_chars=$(wc -c <'$file')
echo $file is '$num_chars characters long'
if [ $num_chars -gt 100 ]
then
echo 'Found $file'
break
fi
done

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

نتیجہ

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

بانٹیں بانٹیں ٹویٹ ای میل۔ کیا یہ ونڈوز 11 کو اپ گریڈ کرنے کے قابل ہے؟

ونڈوز کو دوبارہ ڈیزائن کیا گیا ہے۔ لیکن کیا یہ آپ کو ونڈوز 10 سے ونڈوز 11 میں منتقل کرنے پر راضی کرنے کے لیے کافی ہے؟

اگلا پڑھیں۔
متعلقہ موضوعات۔
  • پروگرامنگ۔
  • لینکس
مصنف کے بارے میں بوبی جیک۔(58 مضامین شائع ہوئے)

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

بوبی جیک سے مزید

ہماری نیوز لیٹر کو سبسکرائب کریں

ٹیک ٹپس ، جائزے ، مفت ای بکس ، اور خصوصی سودوں کے لیے ہمارے نیوز لیٹر میں شامل ہوں!

سبسکرائب کرنے کے لیے یہاں کلک کریں۔