شیل اسکرپٹنگ کے لئے ابتدائی راہنما: بنیادی باتیں

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

شیل اسکرپٹنگ کیا ہے؟

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

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

شیل اسکرپٹ ہمیں زنجیروں میں کمانڈ پروگرام کرنے کی سہولت دیتی ہیں اور بیچ فائلوں کی طرح سسٹم کو ان کو اسکرپٹڈ ایونٹ کے بطور انجام دیتے ہیں۔ وہ کم سے زیادہ مفید کاموں ، جیسے کمانڈ متبادل کی بھی اجازت دیتے ہیں۔ آپ تاریخ کی طرح کمانڈ کی درخواست کرسکتے ہیں اور فائل کا نام سازی اسکیم کے حصے کے طور پر اس کی پیداوار کو استعمال کرسکتے ہیں۔ آپ بیک اپ کو خودکار کرسکتے ہیں اور ہر کاپی شدہ فائل میں موجودہ تاریخ اس کے نام کے آخر میں شامل کی جاسکتی ہے۔ اسکرپٹس صرف کمانڈ کی درخواست نہیں ہوتی ہیں۔ وہ اپنے طور پر پروگرام رکھتے ہیں۔ اسکرپٹنگ آپ کو پروگرامنگ افعال استعمال کرنے کی اجازت دیتی ہے - جیسے ’لوپس‘ کے ل if ، اگر / پھر / اور بیانات ، اور اسی طرح - براہ راست آپ کے آپریٹنگ سسٹم کے انٹرفیس میں۔ اور ، آپ کو دوسری زبان سیکھنے کی ضرورت نہیں ہے کیونکہ آپ وہی استعمال کر رہے ہیں جو آپ پہلے ہی جانتے ہیں: کمانڈ لائن۔

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

اس سے پہلے کہ آپ شروع کریں

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

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

ان کے بنیادی حصے میں ، اسکرپٹ محض متن کی فائلیں ہیں۔ آپ ان کو لکھنے کے ل any کسی بھی ٹیکسٹ ایڈیٹر کا استعمال کرسکتے ہیں: گیڈٹ ، ایماکس ، ویم ، نانو… یہ فہرست جاری ہے۔ بس اس کو سادہ متن کے بطور محفوظ کرنا یقینی بنائیں ، بطور امیر متن ، یا ورڈ دستاویز نہیں۔ چونکہ مجھے نانو فراہم کرنے میں آسانی سے پسند کرتا ہے ، لہذا میں اس کا استعمال کروں گا۔

اسکرپٹ کی اجازت اور نام

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

chmod + x ~ / somecrazyfolder / اسکرپٹ

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

chmod u + x ~ / somecrazyfolder / اسکرپٹ

اس اسکرپٹ کو چلانے کے ل you ، آپ کو صحیح ڈائرکٹری میں سی ڈی کرنا پڑے گا اور پھر اس طرح اسکرپٹ چلائیں گے۔

سی ڈی some / کچھ کریزیفولڈر

./script1

چیزوں کو زیادہ سہل بنانے کے ل you ، آپ اپنے گھر کی ڈائرکٹری میں "بن" فولڈر میں اسکرپٹ رکھ سکتے ہیں۔

~ / بن

بہت سارے جدید ڈسٹروس میں ، اب یہ فولڈر ڈیفالٹ کے ذریعہ نہیں بنایا گیا ہے ، لیکن آپ اسے تشکیل دے سکتے ہیں۔ یہ عام طور پر ایسی جگہ ہے جہاں قابل عمل فائلیں ذخیرہ ہوتی ہیں جو آپ کے صارف سے تعلق رکھتی ہیں نہ کہ دوسرے صارفین سے۔ یہاں اسکرپٹس رکھ کر ، آپ ان کو صرف دوسرے کمانڈوں کی طرح ، ان کے نام کو ٹائپ کرکے چلا سکتے ہیں ، بجائے اس کے کہ اس کے ارد گرد سی ڈی لگائیں اور ’۔/‘ سابقہ ​​استعمال کریں۔

اس سے پہلے کہ آپ اسکرپٹ کا نام رکھیں ، اس کے باوجود ، آپ کو یہ چیک کرنے کے لئے مندرجہ ذیل کمانڈ کو جانچنا چاہئے کہ آیا آپ نے کوئی پروگرام انسٹال کیا ہے جو اس نام کو استعمال کرتا ہے:

کون سا [حکم]

بہت سارے لوگ اپنی ابتدائی اسکرپٹ کو "ٹیسٹ" کا نام دیتے ہیں ، اور جب وہ اسے کمانڈ لائن میں چلانے کی کوشش کرتے ہیں تو کچھ بھی نہیں ہوتا ہے۔ اس کی وجہ یہ ہے کہ یہ ٹیسٹ کے حکم سے متصادم ہے ، جو دلائل کے بغیر کچھ نہیں کرتا ہے۔ ہمیشہ اس بات کا یقین رکھیں کہ آپ کے اسکرپٹ کے نام احکام سے متصادم نہیں ہیں ، بصورت دیگر آپ اپنے آپ کو وہ کام کرتے ہوئے پائیں گے جس کا آپ ارادہ نہیں کرتے ہیں!

اسکرپٹنگ رہنما خطوط

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

  1. ہر اسکرپٹ کو "#! / bin / bash" کے ساتھ ہونا چاہئے
  2. ہر نئی لائن ایک نئی کمانڈ ہوتی ہے
  3. تبصرہ کی لائنز ایک # سے شروع ہوتی ہیں
  4. احکامات گھیرے ہوئے ہیں ()

ہیش بینگ ہیک

جب کوئی شیل کسی ٹیکسٹ فائل کے ذریعے تجزیہ کرتا ہے تو ، فائل کو اسکرپٹ کی حیثیت سے شناخت کرنے کا سب سے سیدھا طریقہ اپنی پہلی لائن بنانا ہے:

#! / بن / باز

اگر آپ دوسرا خول استعمال کرتے ہیں تو اس کا راستہ یہاں رکھیں۔ تبصرہ کی لائنیں ہیش (#) سے شروع ہوتی ہیں ، لیکن اس کے بعد بینگ (!) اور شیل کا راستہ شامل کرنا ہیک کی ایک قسم ہے جو اس تبصرے کے اصول کو نظرانداز کرے گا اور اس اسکرپٹ کو شیل کے ساتھ اس پر عملدرآمد کرنے پر مجبور کرے گا جس کی طرف یہ لائن اشارہ کرتی ہے۔

نئی لائن = نئی کمانڈ

ہر نئی لائن کو ایک نئی کمانڈ ، یا بڑے نظام کا ایک جز سمجھا جانا چاہئے۔ اگر / پھر / اور بیانات ، مثال کے طور پر ، متعدد لائنوں پر قبضہ کر لیں گے ، لیکن اس نظام کا ہر جزو ایک نئی لائن میں ہے۔ اگلی لائن میں کسی کمانڈ کا خون بہنے نہ دیں ، کیوں کہ یہ پچھلی کمانڈ کو چھوٹ سکتا ہے اور اگلی لائن میں آپ کو نقص دے سکتا ہے۔ اگر آپ کا ٹیکسٹ ایڈیٹر یہ کام کر رہا ہے تو ، آپ کو محفوظ رخ پر رہنے کے ل text ٹیکسٹ ریپنگ کو بند کرنا چاہئے۔ آپ نانو بٹ میں ALT + L کو مارتے ہوئے متن کو ریپنگ بند کرسکتے ہیں۔

اکثر #s کے ساتھ تبصرہ کریں

اگر آپ # کے ساتھ لائن شروع کرتے ہیں تو ، لائن کو نظر انداز کردیا جاتا ہے۔ یہ تبصرے کی لکیر میں بدل جاتا ہے ، جہاں آپ اپنے آپ کو یاد دلائیں کہ پچھلی کمانڈ کا آؤٹ پٹ کیا تھا ، یا اگلی کمانڈ کیا کرے گی۔ ایک بار پھر ، ٹیکسٹ ریپنگ کو بند کردیں ، یا اپنے ایک سے زیادہ خطوط پر تبصرہ توڑ دیں جو سب ہیش کے ساتھ شروع ہوتا ہے۔ بہت سارے تبصروں کا استعمال رکھنا ایک اچھا عمل ہے ، کیوں کہ اس سے آپ اور دوسرے افراد آپ کی اسکرپٹ کو زیادہ آسانی سے موافقت کرسکتے ہیں۔ مذکورہ بالا ہیش بینگ ہیک میں واحد استثناء ہے ، لہذا #s کی پیروی نہ کریں! ؛-)

احکامات پیرنٹیسس کے گرد گھیرا ہوتے ہیں

پرانے دنوں میں ، کمانڈ متبادلات ایک ٹک ٹک (`، شیئر shares کلید) کے ساتھ کیے جاتے تھے۔ ہم ابھی تک اس پر ہاتھ نہیں ڈالیں گے ، لیکن چونکہ زیادہ تر لوگ مبادیات سیکھنے کے بعد چلے جاتے ہیں اور تلاش کر رہے ہیں ، اس لئے یہ ذکر کرنا ممکن ہے کہ آپ کو اس کے بجائے قوسین استعمال کرنا چاہئے۔ اس کی بنیادی وجہ یہ ہے کہ جب آپ گھوںسلا کرتے ہیں تو - دوسری کمانڈوں کے اندر کمانڈ لگاتے ہیں - قوسین بہتر کام کرتے ہیں۔

آپ کا پہلا اسکرپٹ

آئیے ایک سادہ اسکرپٹ سے شروع کریں جو آپ کو فائلوں کی کاپی کرنے اور فائل نام کے اختتام پر تاریخیں شامل کرنے کی سہولت دیتا ہے۔ آئیے اس کو "ڈیٹ سی پی" کہتے ہیں۔ پہلے ، یہ دیکھنے کے لئے آئیے یہ نام کسی چیز سے متصادم ہیں:

آپ دیکھ سکتے ہیں کہ کس کمانڈ کی کوئی پیداوار نہیں ہے ، لہذا ہم اس نام کو استعمال کرنے کے لئے پوری طرح تیار ہیں۔

آئیے ~ / بن فولڈر میں ایک خالی فائل بنائیں۔

ٹچ ~ / بن / ڈیٹ سی پی

اور ، فراموش کرنے سے پہلے ، ابھی اجازت کو تبدیل کریں۔

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

نانو ~ / بِن / ڈیٹ سی پی

اور ، آئیے ہم آگے بڑھیں اور شرط اول کی لائن میں ڈالیں ، اور اس اسکرپٹ کے کیا کام ہے اس کے بارے میں ایک تبصرہ۔

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

ہم متغیر میں کیا ڈالیں گے؟ ٹھیک ہے ، تاریخ اور وقت ذخیرہ کریں! ایسا کرنے کے لئے ، ہم تاریخ کے حکم پر کال کریں گے۔

ڈیٹ کمانڈ کی آؤٹ پٹ کی تشکیل کے لئے ذیل میں اسکرین شاٹ پر ایک نظر ڈالیں:

آپ دیکھ سکتے ہیں کہ٪ سے شروع ہونے والے مختلف متغیرات کو شامل کرکے ، آپ کمانڈ کی آؤٹ پٹ کو اپنی مرضی کے مطابق تبدیل کرسکتے ہیں۔ مزید معلومات کے ل you ، آپ ڈیٹ کمانڈ کے دستی صفحہ کو دیکھ سکتے ہیں۔

آئیے ، کمانڈ کے آخری تکرار کو استعمال کریں ، "تاریخ +٪ m_٪ d_٪ y-٪ H.٪ ایم٪ S" ، اور اسے ہمارے اسکرپٹ میں استعمال کریں۔

اگر ہم ابھی اس اسکرپٹ کو بچاتے تو ہم اسے چلا سکتے تھے اور اس سے ہمیں ڈیٹ کمانڈ کی پیداوار مل جاتی ہے جیسا کہ ہم توقع کرتے ہیں:

لیکن ، آئیے کچھ مختلف کریں۔ آئیے اس کمانڈ پر ایک متغیر نام ، جیسے تاریخ کے نام کی شکل دیں۔ اس کے لئے مناسب نحو درج ذیل ہے۔

متغیر = $ (کمانڈ –شن دلائل)

اور ہمارے لئے ، ہم اسے اس طرح تیار کریں گے:

تاریخ_فارمیٹڈ = $ (تاریخ +٪ m_٪ d_٪ y-٪ H.٪ ایم٪ S)

اسی کو ہم کمانڈ متبادل کہتے ہیں۔ ہم بنیادی طور پر باش کو بتا رہے ہیں کہ جب بھی قوسین کے اندر کمانڈ چلانے کے لئے متغیر "ڈیٹ_فارمیٹڈ" ظاہر ہوتا ہے۔ پھر ، جو بھی آؤٹ پٹ کمانڈ دیتا ہے وہ متغیر کے نام کی بجائے ، "ڈیٹ_فارمیٹڈ" ظاہر ہونا چاہئے۔

یہاں ایک اسکرپٹ اور اس کی پیداوار مثال ہے۔

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

آئیے اپنی اسکرپٹ پر واپس جائیں۔ آئیے اگلے کمانڈ کے کاپی کرنے والے حصے میں شامل کریں۔

cp –iv $ 1 $ 2. $ تاریخ_فارمیٹڈ

اس سے commandi اور –v اختیارات کے ساتھ ، کاپی کمانڈ کی درخواست ہوگی۔ سابقہ ​​کسی فائل کو اوور رائٹ کرنے سے پہلے آپ سے توثیق کے بارے میں پوچھے گا ، اور بعد میں وہ ظاہر کرے گا جو کمانڈ لائن میں ہورہا ہے۔

اگلا ، آپ دیکھ سکتے ہیں کہ میں نے "$ 1" کا اختیار شامل کیا ہے۔ اسکرپٹ کرتے وقت ، ایک ڈالر کے نشان ($) کے بعد ایک بڑی تعداد اسکرپٹ کی اس گنتی والی دلیل کو ظاہر کرتی ہے جب اسے طلب کیا جاتا تھا۔ مثال کے طور پر ، مندرجہ ذیل کمانڈ میں:

cp –iv Trogdor2.mp3 ringtone.mp3

پہلی دلیل "Trogdor2.mp3" ہے اور دوسرا دلیل "رنگٹون.یم پی 3" ہے۔

اپنی اسکرپٹ کی طرف مڑ کر ، ہم دیکھ سکتے ہیں کہ ہم دو دلائل کا حوالہ دے رہے ہیں۔

اس کا مطلب یہ ہے کہ جب ہم اسکرپٹ چلاتے ہیں تو ہمیں اسکرپٹ کو صحیح طریقے سے چلانے کے لئے دو دلائل فراہم کرنے کی ضرورت ہوگی۔ پہلی دلیل ، $ 1 ، فائل ہے جس کی نقل کی جائے گی ، اور اسے "cp -iv" کمانڈ کی پہلی دلیل کے طور پر تبدیل کیا جائے گا۔

دوسری دلیل ، $ 2 ، اسی کمانڈ کی آؤٹ پٹ فائل کے طور پر کام کرے گی۔ لیکن ، آپ یہ بھی دیکھ سکتے ہیں کہ یہ مختلف ہے۔ ہم نے ایک مدت جوڑ دی ہے اور ہم نے اوپر سے "ڈیٹ_فارمیٹڈ" متغیر کا حوالہ دیا ہے۔ جاننے کے لئے کہ یہ کیا کرتا ہے؟

جب اسکرپٹ چلتا ہے تو یہاں کیا ہوتا ہے:

آپ دیکھ سکتے ہیں کہ آؤٹ پٹ فائل میں جو کچھ بھی میں نے 2 for ڈالر میں داخل کیا ہے اس کے بعد درج ہوتا ہے ، اس کے بعد ڈیٹ کمانڈ کا آؤٹ پٹ! سمجھ میں آتا ہے ، ٹھیک ہے؟

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

شیل اسکرپٹنگ آپ کے OS کو آپ کے لئے کام کرنے کا مرکز ہے۔ آپ کو ، پروگرامنگ کی کوئی نئی زبان اسے سیکھنے کی ضرورت نہیں ہے۔ گھر میں کچھ بنیادی احکامات کے ساتھ اسکرپٹ کرنے کی کوشش کریں اور یہ سوچنا شروع کریں کہ آپ اس کے لئے کس طرح استعمال کرسکتے ہیں۔

کیا آپ اسکرپٹ کرتے ہیں؟ newbies کے لئے کوئی مشورہ ہے؟ تبصرے میں اپنے خیالات کا اشتراک کریں! اس سیریز میں اور بھی آنا ہے!


$config[zx-auto] not found$config[zx-overlay] not found