ایک شیل سکرپٹ میں لائن کی طرف سے ایک لینکس ٹیکسٹ فائل لائن کے مواد کو پڑھنے کے لئے بہت آسان ہے- جب تک کہ آپ کچھ ٹھیک ٹھیک چٹانوں سے نمٹنے کے لئے. یہاں یہ کیسے محفوظ طریقے سے کام کرنا ہے.
فائلوں، متن، اور idioms.
ہر پروگرامنگ کی زبان میں بیویوں کا ایک سیٹ ہے. یہ معیاری ہیں، عام کاموں کا ایک مجموعہ کو پورا کرنے کے لئے کوئی فریب نہیں. پروگرامر کے ساتھ کام کر رہا ہے زبان کی خصوصیات میں سے ایک کو استعمال کرنے کے لئے وہ ابتدائی یا پہلے سے طے شدہ طریقہ ہیں. وہ ذہنی بلیو پرنٹس کے پروگرامر کے ٹول کٹ کا حصہ بن جاتے ہیں.
فائلوں سے ڈیٹا پڑھنے کی طرح کام، loops کے ساتھ کام کرتے ہیں، اور دو متغیرات کے اقدار کو تبدیل کرنے کے اچھے مثالیں ہیں. پروگرامر ایک عام یا وینیلا فیشن میں ان کے سروں کو حاصل کرنے کے لئے کم سے کم ایک طریقہ کو جان لیں گے. شاید یہ ہاتھ میں ضرورت کے لئے کافی ہے. یا شاید وہ کوڈ کو بے نقاب کریں گے کہ وہ مزید موثر یا مخصوص حل پر لاگو کریں جو وہ ترقی پذیر ہیں. لیکن ان کی انگلیوں پر عمارت کے بلاک کی حیثیت سے ایک عظیم نقطہ نظر ہے.
ایک زبان میں محاذوں کو جاننے اور سمجھنے کے لئے یہ بھی ایک نئی پروگرامنگ زبان لینے کے لئے آسان بناتا ہے. جانتا ہے کہ کس طرح چیزیں ایک زبان میں تعمیر کی جاتی ہیں اور اس کے برابر یا قریبی چیز کی تلاش کی جاتی ہے- دوسری زبان میں آپ کو پہلے سے ہی معلوم ہے اور پروگرامنگ زبانوں کے درمیان اختلافات کی تعریف کرنے کا ایک اچھا طریقہ ہے.
ایک فائل سے لائنز پڑھنا: ایک لائنر
بش میں، آپ استعمال کر سکتے ہیں
جبکہ
ایک فائل سے متن کی ہر سطر کو پڑھنے کے لئے کمانڈ لائن پر لوپ اور اس کے ساتھ کچھ کرو. ہماری ٹیکسٹ فائل "ڈیٹا. txt" کہا جاتا ہے. یہ سال کے مہینے کی ایک فہرست رکھتا ہے.
جنوری فروری مارچ . . اکتوبر نومبر دسمبر
ہمارے سادہ ایک لائنر یہ ہے:
لائن پڑھنے کے دوران؛ $ لائن گونگا کرو کیا اور ایل ٹی؛ ڈیٹا. txt
The.
جبکہ
لوپ فائل سے ایک لائن پڑھتا ہے، اور چھوٹا سا پروگرام کے عملدرآمد کے بہاؤ لوپ کے جسم میں گزرتا ہے. The.
گونج
کمانڈ ٹرمینل ونڈو میں متن کی لائن لکھتا ہے. پڑھنے کی کوشش ناکام ہوجاتی ہے جب پڑھنے کے لئے کوئی اور لائنیں نہیں ہیں، اور لوپ کیا جاتا ہے.
ایک صاف چال کی صلاحیت ہے ایک لوپ میں ایک فائل کو ری ڈائریکٹ کرنے کے لئے . دیگر پروگرامنگ کی زبانوں میں، آپ کو فائل کھولنے کی ضرورت ہوگی، اس سے پڑھیں، اور جب آپ ختم ہو جائیں تو اسے دوبارہ بند کردیں. بش کے ساتھ، آپ آسانی سے فائل ری ڈائریکٹری کا استعمال کرسکتے ہیں اور شیل آپ کے لئے اس کم سطح کی چیزوں کو سنبھال سکتے ہیں.
یقینا، یہ ایک لائنر بہت مفید نہیں ہے. لینکس پہلے ہی فراہم کرتا ہے
کیٹ
کمانڈ، جو ہمارے لئے بالکل وہی ہے. ہم نے تین حروف کمانڈ کو تبدیل کرنے کے لئے ایک طویل ہوا راستہ بنایا ہے. لیکن یہ ایک فائل سے پڑھنے کے اصولوں کو واضح طور پر ظاہر کرتا ہے.
یہ ایک نقطہ نظر، کافی کام کرتا ہے. فرض کریں کہ ہمارے پاس ایک اور ٹیکسٹ فائل ہے جس میں مہینے کے نام شامل ہیں. اس فائل میں، نئے لائن کے کردار کے لئے فرار ترتیب ہر لائن میں شامل کیا گیا ہے. ہم اسے "ڈیٹا 2.txt" کہتے ہیں.
جنوری \ این فروری \ این مارچ \ این . . اکتوبر \ این نومبر \ این دسمبر \ ن
چلو ہماری نئی فائل پر ہمارے ایک لائنر کا استعمال کرتے ہیں.
لائن پڑھنے کے دوران؛ $ لائن گونگا کرو کیا اور ایل ٹی؛ Data2.txt
Backslash فرار کردار "
\
"رد کر دیا گیا ہے. نتیجہ یہ ہے کہ ایک "این" ہر لائن میں شامل کیا گیا ہے. بش ایک کے آغاز کے طور پر backslash کی تشریح کر رہا ہے
فرار ہونے سے فرار
. اکثر، ہم بش نہیں چاہتے ہیں کہ یہ کیا پڑھ رہا ہے. اس کی مکمل طور پر بیک اپ کے سلسلے میں ایک لائن کو پڑھنے کے لئے یہ زیادہ آسان ہوسکتا ہے اور سبھی اور اپنے آپ کو اپنے کوڈ کے اندر اندر، اپنے آپ کو کس طرح نکالنے یا اپنے آپ کو تبدیل کرنے کا انتخاب کریں.
اگر ہم کسی بھی معقول پروسیسنگ یا متن کی لائنوں پر منحصر کرنا چاہتے ہیں، تو ہمیں ایک سکرپٹ استعمال کرنے کی ضرورت ہوگی.
ایک سکرپٹ کے ساتھ ایک فائل سے لائنیں پڑھنا
یہاں ہماری سکرپٹ ہے. اسے "script1.sh" کہا جاتا ہے.
#! / بن / بش
انسداد = 0
linefromfile [116 ] || [ [ [ ] ]؛ کیا
((9] [9 9] انسداد ++
"لائن تک رسائی $ انسداد $ {98] ]
کیا اور ایل ٹی؛
ہم نامی ایک متغیر مقرر
انسداد
صفر پر، اس کے بعد ہم اپنے وضاحت
جبکہ
لوپ.
جبکہ لائن پر پہلے بیان ہے
IFS = ''
.
IFS
اندرونی میدان جداکار کے لئے کھڑا ہے. یہ اقدار کی ڈگری حاصل کی بیش لفظ حدود کی شناخت کے لئے استعمال کرتا ہے. بنیادی طور پر، پڑھنے کی کمانڈ کی قیادت اور سفید فاصلہ پشت بندی بند سٹرپس. ہم فائل وہ ہیں بالکل طور سے لائنوں کو پڑھنے کے لئے چاہتے ہیں تو، ہم مقرر کرنے کی ضرورت
IFS
ایک خالی سٹرنگ ہو.
ہم لوپ کے اس سے ایک بار باہر قائم کر سکتے ہیں ہم میں سے قیمت مقرر کر رہے ہیں جیسا
انسداد
. لیکن زیادہ پیچیدہ سکرپٹ، خاص طور پر میں بہت سے صارف کی وضاحت افعال کے ساتھ ان لوگوں کے ساتھ ان کا ہے-یہ ہے کہ ممکن ہے
IFS
کسی اور جگہ رسم الخط میں مختلف اقدار کے لئے مقرر کیا جا سکتا ہے. اس بات کا یقین ہے کہ
IFS
ایک خالی سٹرنگ کرنے کے لئے ہر وقت مقرر کیا گیا ہے
جبکہ
لوپ ضمانت iterates ہے ہم جانتے ہیں کہ اس کے رویے میں کیا جائے گا.
ہم نامی ایک متغیر میں متن کی ایک سطر پڑھنے کے لئے جا رہے ہیں
LinefromFile
. ہم استعمال کر رہے ہیں
-r
backslashes کی نظر انداز کرنے کا اختیار (ایک عام کردار کے طور پر الٹا سلیش پڑھیں). وہ صرف کسی دوسرے کردار کی طرح سلوک کیا جائے گا اور کوئی خاص علاج نہیں ملے گا.
مطمئن کرے گا کہ دو شرطیں ہیں
جبکہ
لوپ اور متن لوپ کے جسم کی طرف سے عملدرآمد کرنے کی اجازت:
-
-r LinefromFile پڑھ: متن کی ایک سطر کو کامیابی فائل سے پڑھ رہا ہو تبپڑھیںکمانڈ کرنے کے لئے ایک کامیابی سگنل بھیجتا ہےجبکہ، اورجبکہلوپ لوپ کے جسم کو پھانسی بہاؤ گزر جاتا ہے. یاد رکھیں کہپڑھیںکمانڈ ایک کو دیکھنے کے لئے کی ضرورت ہے newline کردار ترتیب میں متن کی لائن کے آخر میں یہ ایک کامیاب پڑھیں غور کرنے کے لئے. فائل ایک نہیں ہے تو POSIX مطابق ٹیکسٹ فائل، آخری سطر ایک newline کردار شامل نہیں کرسکتے . اگرپڑھیںکمانڈ دیکھتا فائل مارکر کے اختتام (مسل اختتام) لائن سے پہلے ایک newline کی طرف سے ختم کیا جاتا ہے، یہ ہو گا نہیں ایک کامیاب پڑھا کے طور پر اس کا علاج. اگر ایسا ہوتا ہے، متن کی آخری سطر لوپ کے جسم کو منظور نہیں کیا جائے گا اور وہ کاروائی نہیں کی جائے گی. -
[-n "$ {LinefromFile}"]: ہم غیر POSIX آہنگ فائلوں کو ہینڈل کرنے کے لئے کچھ اضافی کام کو کرنے کی ضرورت. یہ موازنہ چیکس ٹیکسٹ کہ فائل سے پڑھا جاتا ہے. یہ ایک newline کردار کے ساتھ ختم نہیں کیا جاتا ہے تو، اس کے مقابلے میں اب بھی کرنے کے لئے کامیابی واپس آ جائیں گےجبکہلوپ. یہ اس بات کا یقین کسی بھی پشت بندی لائن کو ٹکڑے لوپ کے جسم کی طرف سے عملدرآمد کر رہے ہیں.
یہ دو شقوں یا منطقی آپریٹر "کی طرف سے الگ کر رہے ہیں
||
"تاکہ اگر
یا تو
شق ریٹرن کامیابی حاصل شدہ متن، لوپ کے جسم کی طرف سے عملدرآمد ایک newline کردار ہے یا نہیں کیا جاتا ہے.
ہمارے لوپ کے جسم میں، ہم incrementing رہے ہیں
انسداد
ایک اور استعمال کرتے ہوئے کی طرف سے متغیر
گونج
ٹرمنل ونڈو پر کچھ پیداوار بھیجنے کے لئے. لائن نمبر اور ہر سطر کا متن دکھائے جاتے ہیں.
ہم اب بھی ایک لوپ میں ایک فائل کو ری ڈائریکٹ کرنے کے لئے ہماری نئ سمت چال استعمال کر سکتے ہیں. اس صورت میں، ہم $ 1 پہلی کمانڈ لائن پیرامیٹر سکرپٹ کو منظور ہے کہ کے نام کی ڈگری حاصل کی ہے کہ ایک متغیر منتقل کیا جا رہا رہے. یہ چال استعمال کرتے ہوئے، ہم آسانی سے ہم اسکرپٹ پر کام کرنا چاہتے ہیں کہ ڈیٹا فائل کے نام پر منتقل کر سکتے ہیں.
کاپی اور ایک ایڈیٹر میں اسکرپٹ پیسٹ کریں اور فائل نام کے ساتھ اسے بچانے "script1.sh." کا استعمال کرتے ہیں
CHMOD
کمانڈ
یہ کارکردگی قابل بنانے کے لئے
.
CHMOD + X script1.sh
چلو ہمارے اسکرپٹ data2.txt ٹیکسٹ فائل کا ہوتا ہے اور backslashes کی اس کے اندر موجود ہے دیکھتے ہیں.
./ script1.sh data2.txt
سطر میں ہر کردار لفظ بہ لفظ دکھایا جاتا ہے. backslashes کی فرار حروف کے طور پر تشریح نہیں ہیں. وہ باقاعدگی سے حروف کے طور پر طباعت کر رہے ہیں.
ایک تقریب میں لائن پاسنگ
ہم اب صرف سکرین پر متن گونج رہے ہیں. ایک حقیقی دنیا پروگرامنگ منظر نامے میں، ہم امکان متن کی لائن کے ساتھ زیادہ دلچسپ کچھ کرنے کے بارے میں ہو جائے گا. زیادہ تر مقدمات میں، یہ ایک اور تقریب میں لائن کی مزید کارروائی ہینڈل کرنے میں ایک اچھا پروگرامنگ کی پریکٹس ہے.
یہاں ہم یہ کر سکتے ہیں کس طرح ہے. یہ "script2.sh" ہے.
ہم وضاحت ہمارے
انسداد
پہلے کی طرح متغیر ہے، اور پھر ہم نامی تقریب کی وضاحت
process_line ()
. ایک تقریب کی تعریف ظاہر ہونا چاہیے
پہلے
تقریب پہلی رسم الخط میں کہا جاتا ہے.
ہمارے تقریب کے ہر iteration میں متن کے نو پڑھیں لکیر منظور کیا جا رہا ہے
جبکہ
لوپ. ہم استعمال کر کے تقریب کے اندر اندر اس قدر رسائی حاصل کرسکتے ہیں
$ 1
متغیر. تقریب میں منظور دو متغیر وہاں تھے تو، ہم استعمال کر ان اقدار تک رسائی حاصل کر سکتا ہے
$ 1
اور
$ 2
، اور زیادہ متغیر کے لئے پر ہیں.
ڈبلیو
سے Hile
لوپ بنیادی طور پر ایک ہی ہے. لوپ کے جسم کے اندر صرف ایک تبدیلی ہے. The.
گونج
لائن پر ایک کال کی طرف سے تبدیل کر دیا گیا ہے
process_line ()
تقریب. نوٹ اگر آپ تقریب آپ کو یہ مطالبہ کر رہے ہیں جب کے نام پر "()" بریکٹ استعمال کرنے کی ضرورت نہیں ہے.
متن کی لائن انعقاد متغیر کے نام،
LinefromFile
واوین میں لپٹی یہ تقریب سے گزر رہا ہے جب کی جاتی ہے. یہ ان میں خالی جگہ ہے کہ لائنز سے پورا کرتا ہے. واوین کے بغیر، سب سے پہلے لفظ کے طور پر علاج کیا جاتا ہے
$ 1
تقریب کی طرف سے، دوسرے لفظ سمجھا جاتا ہے
$ 2
، اور اسی طرح. واوین بات کا یقین استعمال کرتے ہوئے ہے کہ اس کو مکمل طور پر، متن کی پوری لائن سنبھالا ہے،
$ 1
. یہ وہ جگہ ہے یاد رکھیں کہ
نہیں
ایسا ہی
$ 1
کہ سکرپٹ کے لئے منظور کیا ایک ہی ڈیٹا فائل ڈگری حاصل کی.
کیونکہ
انسداد
اسکرپٹ کے اہم جسم میں اعلان کیا گیا ہے اور ایک تقریب کے اندر، اس کے اندر محولہ جا سکتا ہے نہیں
process_line ()
تقریب.
کاپی یا ایک ایڈیٹر میں مندرجہ بالا سکرپٹ ٹائپ کریں اور فائل نام کے ساتھ اسے بچانے "script2.sh." اس کے ساتھ کارکردگی قابل بنائیں
CHMOD
انکار
CHMOD + X script2.sh
اب ہم اس کو چلانے اور ایک نیا ڈیٹا فائل میں منتقل، کر سکتے ہیں "data3.txt." یہ اس میں مہینوں کی ایک فہرست ہے، اور اس پر بہت سے الفاظ کے ساتھ ایک لائن ہے.
جنوری فروری مارچ . . اکتوبر نومبر \ nMore متن "لائن کے آخر میں" دسمبر
ہمارا حکم ہے:
./ script2.sh data3.txt
لائنز فائل سے پڑھنے اور کرنے ایک ایک کر کے گزر جاتے ہیں
process_line ()
تقریب. تمام لائنیں بیک اسپیس کے ساتھ عجیب سے ایک، واوین، اور اس میں ایک سے زیادہ الفاظ بھی شامل ہیں، درست طریقے سے دکھائے جاتے ہیں.
بلڈنگ بلاکس مفید ہیں
کا کہنا ہے کہ ایک محاورے جو زبان پر منفرد کچھ پر مشتمل ہونا چاہئے کہ فکر کی ایک گاڑی نہیں ہے. یہ ایک عقیدہ میں کو سبسکرائب کہ نہیں ہے. کیا ضروری ہے کہ یہ زبان کا اچھا استعمال کرتا ہے یاد کرنے کے لئے آسان ہے، اور آپ کے کوڈ میں کچھ فعالیت کو لاگو کرنے کے لئے ایک قابل اعتماد اور مضبوط طریقہ فراہم کرتا ہے.