بش میں متغیر کے ساتھ کیسے کام کریں
متغیرات ضروری ہیں اگر آپ اسکرپٹ لکھنا چاہتے ہیں اور یہ سمجھنا چاہتے ہیں کہ ویب سے آپ کوڈ کوڈ اور پیسٹ کرنے والے کوڈ کا آپ کے لینکس کمپیوٹر پر کیا اثر پڑے گا۔ ہم آپ کو شروع کردیں گے!
متغیر 101
متغیر کو علامتوں کا نام دیا گیا ہے جو تار یا عددی قدر کی نمائندگی کرتے ہیں۔ جب آپ انہیں کمانڈز اور تاثرات میں استعمال کرتے ہیں تو ان کے ساتھ ایسا سلوک کیا جاتا ہے جیسے آپ نے متغیر کے نام کی بجائے ان کی رکھی ہوئی قیمت ٹائپ کی ہو۔
متغیر بنانے کے ل you ، آپ صرف اس کے لئے نام اور قدر فراہم کرتے ہیں۔ آپ کے متغیر ناموں کو وضاحتی ہونا چاہئے اور ان کی قدر کی یاد دلانا چاہئے۔ متغیر نام کسی نمبر کے ساتھ شروع نہیں ہوسکتا ہے ، اور نہ ہی اس میں جگہیں شامل ہوسکتی ہیں۔ تاہم ، یہ انڈر سکور کے ساتھ شروع ہوسکتی ہے۔ اس کے علاوہ ، آپ اعلی اور چھوٹے حرفی حرف میں سے کسی مرکب کا استعمال کرسکتے ہیں۔
مثالیں
یہاں ، ہم پانچ متغیرات بنائیں گے۔ فارمیٹ نام ، مساوی نشان ٹائپ کرنا ہے =
، اور قدر. نوٹ کہ مساوی نشان سے پہلے یا بعد میں کوئی جگہ نہیں ہے۔ ایک متغیر کو قدر دینا اکثر کے طور پر کہا جاتا ہے تفویض کرنا متغیر کے لئے ایک قیمت.
ہم چار تار متغیرات اور ایک عددی متغیر بنائیں گے ،اس سال:
میں = ڈیو
my_boost = لینکس
اسے = پوپے
his_boost = پالک
یہ_یئر = 2019
متغیر میں رکھی ہوئی قیمت کو دیکھنے کے ل the ، استعمال کریں بازگشت
کمانڈ. آپ کو متغیر نام سے پہلے ڈالر کے نشان کے ساتھ ہونا چاہئے $
جب بھی آپ اس میں موجود قیمت کا حوالہ دیتے ہیں ، جیسا کہ ذیل میں دکھایا گیا ہے:
بازگشت $ my_name
بازگشت $ my_boost
گونج $ اس_یئر
آئیے اپنے تمام متغیرات کو ایک ساتھ استعمال کریں:
گونج "$ میرا_ فروغ" to میرے لئے ہے $ جیسا کہ oo اس_ کی_ بوسٹ $ اس (سی) $ اس_یئر "
متغیرات کی قدریں ان کے ناموں کی جگہ لیتی ہیں۔ آپ متغیر کی اقدار کو بھی تبدیل کرسکتے ہیں۔ متغیر کو ایک نئی قیمت تفویض کرنے کے ل، ،my_boost
، جب آپ اس کی پہلی قیمت تفویض کرتے ہیں تو آپ صرف اس کا اعادہ کرتے ہیں:
my_boost = شراب
اگر آپ پچھلی کمانڈ کو دوبارہ چلاتے ہیں تو ، اب آپ کو ایک مختلف نتیجہ ملے گا:
گونج "$ میرا_ فروغ" to میرے لئے ہے $ جیسا کہ oo اس_ کی_ بوسٹ $ اس (سی) $ اس_یئر "
لہذا ، آپ وہی کمانڈ استعمال کرسکتے ہیں جو ایک ہی متغیر کا حوالہ دیتا ہے اور اگر آپ متغیر میں رکھی اقدار کو تبدیل کرتے ہیں تو مختلف نتائج حاصل کرسکتے ہیں۔
ہم بعد میں متغیرات کے حوالے سے بات کریں گے۔ ابھی کے لئے ، یہاں کچھ چیزیں یاد رکھنے کی ہیں:
- ایک حوالوں میں ایک متغیر
'
متغیر کی حیثیت سے نہیں بلکہ لفظی تار کے طور پر سلوک کیا جاتا ہے۔ - کوٹیشن نمبر میں متغیر
"
متغیر کی طرح سلوک کیا جاتا ہے۔ - متغیر میں رکھی ہوئی قیمت کے ل، ، آپ کو ڈالر کا نشان مہیا کرنا ہوگا
$
. - ڈالر کے نشان کے بغیر ایک متغیر
$
صرف متغیر کا نام فراہم کرتا ہے۔
آپ ایک متغیر بھی تشکیل دے سکتے ہیں جو موجودہ متغیر یا متغیر کی تعداد سے اس کی قیمت لیتا ہے۔ مندرجہ ذیل کمانڈ نے ایک نیا متغیر کی وضاحت کی ہے پینے کے_پہلے_ہر سال ،
اور اسے مشترکہ اقدار تفویض کرتا ہے my_boost
اور اس سال
متغیر:
پینے_ کے_یئر = "$ میرا_ فروغ $ یہ_یئر"
ایکو ڈرنک_اس سال
اسکرپٹس میں متغیرات کا استعمال کیسے کریں
اسکرپٹس متغیر کے بغیر مکمل طور پر ہیمسٹرنگ ہوں گی۔ متغیرات لچک فراہم کرتے ہیں جو کسی مخصوص ، حل کے بجائے اسکرپٹ کو عام بناتے ہیں۔ فرق کو واضح کرنے کے لئے ، یہاں ایک اسکرپٹ ہے جو فائلوں میں شمار ہوتا ہے / دیو
ڈائریکٹری
اسے کسی ٹیکسٹ فائل میں ٹائپ کریں ، اور پھر اسے اس طرح محفوظ کریں fcnt.sh
("فائل گنتی" کیلئے):
#! / بن / باز فولڈر_ٹو_کاؤنٹ = / دیو فائل_کونٹ = $ (ایل ایس $ فولڈر_ٹو_کاؤنٹ | ڈبلیو سی ایل) گونج $ فائل_کاؤنٹ فائلوں $ فولڈر_ٹو_کاؤنٹ میں
اسکرپٹ چلانے سے پہلے ، آپ کو اس پر عمل درآمد کرنا ہوگا ، جیسا کہ ذیل میں دکھایا گیا ہے:
chmod + x fcnt.sh
اسکرپٹ چلانے کے لئے درج ذیل کو ٹائپ کریں:
./fcnt.sh
یہ فائلوں کی تعداد کو پرنٹ کرتا ہے / دیو
ڈائریکٹری یہ کام کرنے کا طریقہ یہاں ہے:
- ایک متغیر کہا جاتا ہے
فولڈر_ٹو_کاؤنٹ
تعریف کی گئی ہے ، اور اس نے تار / / dev کو تھامے ہوئے ہے۔ - ایک اور متغیر ، جسے کہا جاتا ہے
فائل_کاؤنٹ
، بیان کیا جاتا ہے. یہ متغیر کمانڈ متبادل سے اپنی قیمت لیتا ہے۔ یہ قوسین کے درمیان کمانڈ کا جملہ ہے$( )
. نوٹ کریں کہ ایک ڈالر کا نشان ہے$
پہلی قوسین سے پہلے۔ یہ تعمیر$( )
قوسین کے اندر موجود احکامات کا جائزہ لیتا ہے ، اور پھر ان کی حتمی قیمت لوٹاتا ہے۔ اس مثال کے طور پر ، اس کی قیمت کو تفویض کیا جاتا ہےفائل_کاؤنٹ
متغیر جہاں تکفائل_کاؤنٹ
متغیر کا تعلق ہے ، اس کو روکنے کے لئے ایک قیمت گزر گئی ہے۔ اس سے کوئی سروکار نہیں ہے کہ قیمت کیسے حاصل کی گئی۔ - کمانڈ متبادل میں جانچ کی گئی کمانڈ ایک انجام دیتی ہے
ls
میں ڈائریکٹری میں فائل کی فہرستفولڈر_ٹو_کاؤنٹ
متغیر ، جو "/ dev" پر سیٹ کیا گیا ہے۔ تو ، اسکرپٹ "ls / dev" کمانڈ پر عملدرآمد کرتا ہے۔ - اس کمانڈ سے آؤٹ پٹ کو پائپڈ کیا گیا ہے
ڈبلیو سی
کمانڈ.-l
(لائن شمار) آپشن وجوہاتڈبلیو سی
سے آؤٹ پٹ میں لائنوں کی تعداد گننے کے لls
کمانڈ. چونکہ ہر فائل ایک علیحدہ لائن پر درج ہے ، یہ "/ dev" ڈائرکٹری میں فائلوں اور سب ڈائرکٹریاں کی گنتی ہے۔ اس قدر کو تفویض کیا جاتا ہےفائل_کاؤنٹ
متغیر - حتمی لائن نتیجہ کو آؤٹ پٹ کرنے کے لئے بازگشت کا استعمال کرتی ہے۔
لیکن یہ صرف "/ dev" ڈائرکٹری کے لئے کام کرتا ہے۔ ہم کسی بھی ڈائرکٹری کے ساتھ اسکرپٹ کو کیسے کام کرسکتے ہیں؟ بس یہ ایک چھوٹی سی تبدیلی ہے۔
اسکرپٹس میں کمانڈ لائن پیرامیٹرز کا استعمال کیسے کریں
بہت سے احکامات ، جیسے ls
اور ڈبلیو سی
، کمانڈ لائن پیرامیٹرز لیں۔ یہ کمانڈ کو معلومات فراہم کرتے ہیں ، لہذا یہ جانتا ہے کہ آپ کیا کرنا چاہتے ہیں۔ اگر آپ چاہیںls
اپنی ہوم ڈائرکٹری پر کام کرنے کے لئے اور چھپی ہوئی فائلیں بھی ظاہر کرنے کے ل you ، آپ درج ذیل کمانڈ استعمال کرسکتے ہیں ، جہاں ٹلڈ ہے ~
اور -ا
(تمام) آپشن کمانڈ لائن پیرامیٹرز ہیں:
ls ~ -a
ہمارے اسکرپٹ کمانڈ لائن پیرامیٹرز کو قبول کرسکتے ہیں۔ ان کا حوالہ اسی طرح دیا گیا ہے $1
پہلے پیرامیٹر کے لئے ، $2
دوسرے کی طرح ، اور اسی طرح ، $9
نویں پیرامیٹر کے لئے (دراصل ، ایک ہے $0
، کے ساتھ ساتھ ، لیکن یہ اسکرپٹ کو ہمیشہ رکھنے کے لئے محفوظ ہے۔)
آپ اسکرپٹ میں کمانڈ لائن پیرامیٹرز کا حوالہ اسی طرح دے سکتے ہیں جیسے آپ باقاعدگی سے متغیر کرتے ہو۔ آئیے اپنی اسکرپٹ میں ترمیم کریں ، جیسا کہ ذیل میں دکھایا گیا ہے ، اور اسے نئے نام سے محفوظ کریںfcnt2.sh
:
#! / بن / باز فولڈر_ٹو_کاؤنٹ = file 1 فائل_کاؤنٹ = $ (ایل ایس $ فولڈر_ٹو_کاؤنٹ | ڈبلیو سی ایل) گونج $ فائل_کاؤنٹ فائلوں $ فولڈر_ٹو_کاؤنٹ میں
اس بار ، فولڈر_ٹو_کاؤنٹ
متغیر کو پہلے کمانڈ لائن پیرامیٹر کی قیمت تفویض کی گئی ہے ، $1
.
باقی اسکرپٹ پہلے کی طرح کام کرتی ہے۔ کسی مخصوص حل کے بجائے ، اب آپ کا اسکرپٹ عام ہے۔ آپ اسے کسی بھی ڈائرکٹری میں استعمال کرسکتے ہیں کیونکہ صرف "/ dev" کے ساتھ کام کرنا ہارڈ کوڈ نہیں ہے۔
آپ اسکرپٹ کو قابل عمل بنائے جانے کا طریقہ یہاں ہیں:
chmod + x fcnt2.sh
اب ، اسے کچھ ڈائریکٹریوں کے ساتھ آزمائیں۔ آپ یہ یقینی بنانے کے لئے پہلے "/ dev" کرسکتے ہیں کہ آپ کو پہلے جیسا ہی نتیجہ ملے گا۔ درج ذیل کو ٹائپ کریں:
./fnct2.sh / dev
./fnct2.sh / وغیرہ
./fnct2.sh / بن
آپ کو وہی نتیجہ (207 فائلیں) ملتا ہے جیسا کہ "/ dev" ڈائرکٹری کے لئے پہلے تھا۔ یہ حوصلہ افزا ہے ، اور آپ کو دوسرے کمانڈ لائن پیرامیٹرز میں سے ہر ایک کے لئے ڈائریکٹری سے متعلق نتائج ملتے ہیں۔
اسکرپٹ کو مختصر کرنے کے لئے ، آپ متغیر کے ساتھ بھیج سکتے ہیں ،فولڈر_ٹو_کاؤنٹ
، بالکل ، اور صرف حوالہ $1
مندرجہ ذیل کے طور پر:
#! / bin / bash file_count = $ (ls $ 1 wc -l) ایکو $ file_count فائلیں $ 1 میں
خصوصی متغیرات کے ساتھ کام کرنا
ہم نے ذکر کیا $0
، جو ہمیشہ اسکرپٹ کے فائل نام پر سیٹ ہوتا ہے۔ اس کی مدد سے آپ اسکرپٹ کو چیزوں کو کرنے کے لئے استعمال کرسکتے ہیں جیسے اس کا نام صحیح طریقے سے پرنٹ کریں ، چاہے اس کا نام بدل دیا گیا ہو۔ یہ لاگ ان حالات میں مفید ہے ، جس میں آپ اس عمل کا نام جاننا چاہتے ہیں جس نے اندراج کو شامل کیا۔
مندرجہ ذیل دیگر خصوصی پیش سیٹ متغیرات ہیں۔
- $#: اسکرپٹ میں کتنے کمانڈ لائن پیرامیٹرز گزرے تھے۔
- $@: تمام کمانڈ لائن پیرامیٹرز اسکرپٹ میں منتقل ہوگئے۔
- $?: چلانے کے لئے آخری عمل کی خارجی حیثیت۔
- $$: موجودہ اسکرپٹ کا عمل ID (PID)۔
- صارف: اسکرپٹ پر عمل درآمد کرنے والے صارف کا صارف نام۔
- O HOSTNAME: اسکرپٹ چلانے والے کمپیوٹر کا میزبان نام۔
- CO سیکنڈ: اسکرپٹ کی تعداد جس سیکنڈ میں چل رہی ہے۔
- ND رینڈم: بے ترتیب نمبر لوٹاتا ہے۔
- $ لینو: اسکرپٹ کا موجودہ لائن نمبر لوٹاتا ہے۔
آپ ان سب کو ایک ہی اسکرپٹ میں دیکھنا چاہتے ہیں ، ہے نا؟ آپ کر سکتے ہیں! مندرجہ ذیل کو ٹیکسٹ فائل کی حیثیت سے محفوظ کریں ،special.sh
:
#! / bin / bash echo "وہاں $ # کمانڈ لائن پیرامیٹرز موجود تھے" ایکو "وہ ہیں: $ @" گونج "پیرامیٹر 1 ہے: $ 1" گونج "اسکرپٹ کو کہا جاتا ہے: $ 0" # کوئی پرانا عمل تاکہ ہم اطلاع دے سکیں۔ باہر نکلنے کی حالت پر پی ڈبلیو ڈی کی بازگشت "پی ڈبلیو ڈی لوٹ گئی $؟" گونج "اس اسکرپٹ میں پروسیس آئی ڈی ہے" ایکو "اسکرپٹ کا آغاز $ صارف" نے کیا تھا "گونج" یہ $ HOSTNAME "نیند 3 پر گونج رہا ہے" یہ $ سیکنڈ سیکنڈ سے چل رہا ہے "گونج" رینڈم نمبر: ND رینڈم " گونج "یہ اسکرپٹ کا لائن نمبر $ لائنینو ہے"
اس پر عمل درآمد کرنے کیلئے درج ذیل کو ٹائپ کریں:
chmod + x special.sh
اب ، آپ اسے مختلف کمانڈ لائن پیرامیٹرز کے ایک گروپ کے ساتھ چلا سکتے ہیں ، جیسا کہ ذیل میں دکھایا گیا ہے۔
ماحولیاتی تغیرات
باش ماحول کے متغیرات کو استعمال کرتے ہوئے اپنے ماحول کی خصوصیات کو ریکارڈ کرنے اور ریکارڈ کرنے کے لئے استعمال کرتا ہے جب اس کا آغاز ہوتا ہے۔ یہ ہولڈ معلومات باش آسانی سے رسائی حاصل کرسکتی ہیں ، جیسے آپ کا صارف نام ، لوکل ، آپ کی تاریخ کی فائل کی کمانوں کی تعداد ، آپ کا ڈیفالٹ ایڈیٹر اور بہت کچھ۔
اپنے بش سیشن میں ماحول کے متحرک تغیرات کو دیکھنے کے ل this ، یہ کمانڈ استعمال کریں:
env | کم
اگر آپ فہرست میں شامل ہوجاتے ہیں تو ، آپ کو کچھ مل سکتا ہے جو آپ کے اسکرپٹس میں حوالہ دینے میں کارآمد ہوگا۔
متغیرات کو کیسے برآمد کریں
جب کوئی اسکرپٹ چلتا ہے ، تو وہ اپنے عمل میں ہوتا ہے ، اور اس کے استعمال کرنے والے متغیرات کو اس عمل سے باہر نہیں دیکھا جاسکتا ہے۔ اگر آپ کسی دوسرے اسکرپٹ کے ساتھ کسی متغیر کا اشتراک کرنا چاہتے ہیں جسے آپ کے اسکرپٹ نے لانچ کیا ہے تو آپ کو یہ متغیر برآمد کرنا ہوگا۔ ہم آپ کو دو اسکرپٹ کے ذریعہ کیسے دکھائیں گے۔
سب سے پہلے ، مندرجہ ذیل کو فائل نام کے ساتھ محفوظ کریںاسکرپٹ_ون.ش
:
# !! $ پہلا_بار ، دوسرا_وار = $ دوسرا_وار "
اس سے دو متغیرات پیدا ہوتے ہیں ، پہلا_بار
اور دوسرا_وار
، اور یہ کچھ اقدار تفویض کرتا ہے۔ یہ انھیں ٹرمینل ونڈو پر پرنٹس کرتا ہے ، متغیرات اور کالوں کو برآمد کرتا ہے اسکرپٹ_ٹو_ش
. کب اسکرپٹ_ٹو_ش
ختم ہوجاتا ہے ، اور اس اسکرپٹ پر کارروائی کے بہاؤ کی واپسی ہوتی ہے ، یہ دوبارہ متغیرات کو ٹرمینل ونڈو پر پرنٹس کرتا ہے۔ پھر ، آپ دیکھ سکتے ہیں کہ آیا وہ تبدیل ہوگئے ہیں۔
دوسرا اسکرپٹ جو ہم استعمال کریں گے وہ ہے اسکرپٹ_ٹو_ش
. یہ اسکرپٹ ہے کہاسکرپٹ_ون.ش
کالیں۔ درج ذیل کو ٹائپ کریں:
# !! "سیکنڈ_ور"
یہ دوسرا اسکرپٹ دو متغیرات کی اقدار کو پرنٹ کرتا ہے ، انھیں نئی اقدار تفویض کرتا ہے ، اور پھر انھیں دوبارہ پرنٹ کرتا ہے۔
ان اسکرپٹ کو چلانے کے ل you ، آپ کو ان پر عمل درآمد کرنے کے ل the درج ذیل کو ٹائپ کرنا ہوگا۔
chmod + x اسکرپٹ_ون.ش chmod + x اسکرپٹ_ٹو_ش
اور اب ، لانچ کرنے کے لئے درج ذیل کو ٹائپ کریں اسکرپٹ_ون.ش
:
./script_one.sh
آؤٹ پٹ ہمیں بتاتا ہے کہ:
- اسکرپٹ_ون.ش متغیرات کی اقدار پرنٹ کرتا ہے ، جو الفا اور براوو ہیں۔
- اسکرپٹ_ٹو_ش متغیر (الفا اور براوو) کی اقدار کو جیسے ہی موصول ہوا پرنٹس کرتا ہے۔
- اسکرپٹ_ٹو_ش انھیں چارلی اور ڈیلٹا میں بدل دیتا ہے۔
- اسکرپٹ_ون.ش متغیر کی اقدار پرنٹ کرتا ہے ، جو اب بھی الفا اور براوو ہیں۔
دوسری اسکرپٹ میں کیا ہوتا ہے ، دوسری اسکرپٹ میں رہتا ہے۔ یہ اس طرح ہے جیسے متغیر کی کاپیاں دوسری اسکرپٹ کو بھیجی جاتی ہیں ، لیکن اسکرپٹ کے نکل جانے پر انہیں ضائع کردیا جاتا ہے۔ پہلی اسکرپٹ میں اصل متغیرات کو کسی ایسی چیز سے تبدیل نہیں کیا جاتا ہے جو ان کی کاپیوں میں ہوتا ہے۔
متغیرات کا حوالہ کیسے دیں
آپ نے محسوس کیا ہوگا کہ جب اسکرپٹ میں حوالہ متغیر ہوتا ہے تو ، وہ کوٹیشن نمبروں میں ہوتے ہیں "
. اس سے متغیرات کا صحیح حوالہ دیا جاسکتا ہے ، لہذا جب اسکرپٹ میں لائن کو عمل میں لایا جاتا ہے تو ان کی قدریں استعمال کی جاتی ہیں۔
اگر آپ کسی متغیر کو جس قدر کی تفویض کرتے ہیں اس میں خالی جگہیں شامل ہوتی ہیں تو ، جب آپ انہیں متغیر کے لئے تفویض کرتے ہیں تو ان کی قیمت درج کرنا ضروری ہے۔ اس کی وجہ یہ ہے کہ ڈیفالٹ کے طور پر ، بش ایک ڈلیمیٹر کے طور پر ایک جگہ کا استعمال کرتے ہیں۔
ایک مثال یہ ہے:
سائٹ_ نام = کس طرح Geek
بش "گیک" سے پہلے کی جگہ کو اس اشارے کے طور پر دیکھتا ہے کہ ایک نیا کمانڈ شروع ہو رہا ہے۔ یہ اطلاع دیتا ہے کہ ایسی کوئی کمانڈ نہیں ہے ، اور لائن کو ترک کردیتی ہے۔ بازگشت
ہمیں دکھاتا ہے کہ جگہ کا نام
متغیر کے پاس کچھ بھی نہیں ہے - یہاں تک کہ "کس طرح" بھی نہیں ہے۔
قیمت کے ارد گرد کوٹیشن نشانات کے ساتھ دوبارہ کوشش کریں ، جیسا کہ ذیل میں دکھایا گیا ہے:
سائٹ_ کا نام = "Geek کرنے کا طریقہ"
اس بار ، اس کو ایک ہی قدر کے طور پر تسلیم کیا گیا ہے اور صحیح معنوں میں تفویض کیا گیا ہے جگہ کا نام
متغیر
بازگشت آپ کا دوست ہے
متبادل کو کمانڈ کرنے ، متغیرات کے حوالے سے ، اور ڈالر کے نشان کو کب شامل کرنا ہے اس کی یاد میں کچھ وقت لگ سکتا ہے۔
اس سے پہلے کہ آپ انٹر کو دبائیں اور باش کمانڈوں کی ایک لائن کو عمل میں لائیں ، اس کے ساتھ کوشش کریں بازگشت
اس کے سامنے اس طرح ، آپ یہ یقینی بنا سکتے ہیں کہ جو ہونے والا ہے وہی ہے جو آپ چاہتے ہیں۔ آپ نحو میں کسی بھی غلطی کو بھی پکڑ سکتے ہیں۔