#ام_دی_کورس
حلقه ها در Bash
حلقه ها برای هر زبان اسکریپتی ضروری هستن. بریم که تو این بخش از آموزش Bash حلقه های for، while و until را با مثال های کاربردی یاد بگیریم
تو این قسمت از آموزش، سه ساختار مختلف حلقه bash رو بررسی میکنیم. همچنین از حلقه ها برای پیمایش عناصر آرایه هم استفاده میکنیم.
علاوه بر این، از عبارات break و continue برای کنترل حلقه ها استفاده میکنیم رو و در نهایت نحوه ایجاد حلقه های بی نهایت را یاد میگیریم :)
حلقه های For در Bash
💡 حلقه های For یکی از سه نوع ساختار حلقه ای هستند که میتونید در bash استفاده کنید. دو سبک مختلف برای نوشتن حلقه for وجود داره:
👈 حلقه های for به سبک C
👈استفاده از حلقه for در لیست/رنج آیتم ها
حلقه های For به سبک C یا همون C-style در Bash
اگه با یه زبان برنامه نویسی مثل C یا C++ آشنا هستید، پس سینتکس حلقه for زیر برای شما آشناس:
با استفاده از سینتکس به سبک C فوق، حلقه for زیر ده بار عبارت "Hello Friend" رو چاپ میکنه:
حلقه های For لیست/رنج(List/Range) در Bash
نوع دیگری از سینتکس حلقه for نیز وجود دارد که به ویژه در صورت کار با لیستی از فایل ها (یا رشته ها)، محدوده اعداد، آرایه ها، خروجی یک دستور و غیره مفیده. سینتکس حلقه for لیست/رنج به صورت زیر هست:
برای مثال، حلقه for زیر دقیقا همان کاری رو انجام میده که حلقه for به سبک C که در بخش قبلی ایجاد کردیم انجام میده:
اسکریپت
نمونه خروجی هنگام اجرای اسکریپت
ادامه در پست بعدی...
🆔 @MdDaily
حلقه ها در Bash
حلقه ها برای هر زبان اسکریپتی ضروری هستن. بریم که تو این بخش از آموزش Bash حلقه های for، while و until را با مثال های کاربردی یاد بگیریم
تو این قسمت از آموزش، سه ساختار مختلف حلقه bash رو بررسی میکنیم. همچنین از حلقه ها برای پیمایش عناصر آرایه هم استفاده میکنیم.
علاوه بر این، از عبارات break و continue برای کنترل حلقه ها استفاده میکنیم رو و در نهایت نحوه ایجاد حلقه های بی نهایت را یاد میگیریم :)
حلقه های For در Bash
💡 حلقه های For یکی از سه نوع ساختار حلقه ای هستند که میتونید در bash استفاده کنید. دو سبک مختلف برای نوشتن حلقه for وجود داره:
👈 حلقه های for به سبک C
👈استفاده از حلقه for در لیست/رنج آیتم ها
حلقه های For به سبک C یا همون C-style در Bash
اگه با یه زبان برنامه نویسی مثل C یا C++ آشنا هستید، پس سینتکس حلقه for زیر برای شما آشناس:
for ((initialize ; condition ; increment)); do
[COMMANDS]
done
با استفاده از سینتکس به سبک C فوق، حلقه for زیر ده بار عبارت "Hello Friend" رو چاپ میکنه:
for ((i = 0 ; i < 10 ; i++)); doحلقه for ابتدا متغیر عدد صحیح
echo "Hello Friend"
done
i را به صفر مقداردهی میکنه، بعد شرط (i <10) را آزمایش می کنه. اگه درست بود، حلقه خط echo “Hello Friend” رو اجرا می کنه و متغیر i رو 1 واحد افزایش میده، و سپس حلقه دوباره و دوباره اجرا میشه تا زمانی که i دیگر کمتر از 10 نباشه.حلقه های For لیست/رنج(List/Range) در Bash
نوع دیگری از سینتکس حلقه for نیز وجود دارد که به ویژه در صورت کار با لیستی از فایل ها (یا رشته ها)، محدوده اعداد، آرایه ها، خروجی یک دستور و غیره مفیده. سینتکس حلقه for لیست/رنج به صورت زیر هست:
for item in [LIST]; do
[COMMANDS]
done
برای مثال، حلقه for زیر دقیقا همان کاری رو انجام میده که حلقه for به سبک C که در بخش قبلی ایجاد کردیم انجام میده:
for i in {1..10}; do
echo "Hello Friend"
doneاسکریپت
var.sh زیر تمام فایل ها و دایرکتوری هایی رو که در زیر دایرکتوری /var وجود دارند رو نمایش میده:#!/bin/bash
for i in /var/*; do
echo $i
done
نمونه خروجی هنگام اجرای اسکریپت
var.sh:linux@ubuntu:~$ ./var.sh
/var/backups
/var/cache
/var/crash
/var/lib
/var/local
/var/lock
/var/log
/var/mail
/var/metrics
/var/opt
/var/run
/var/snap
/var/spool
/var/tmp
ادامه در پست بعدی...
🆔 @MdDaily
❤🔥1❤1
Md Daily
#ام_دی_کورس حلقه ها در Bash حلقه ها برای هر زبان اسکریپتی ضروری هستن. بریم که تو این بخش از آموزش Bash حلقه های for، while و until را با مثال های کاربردی یاد بگیریم تو این قسمت از آموزش، سه ساختار مختلف حلقه bash رو بررسی میکنیم. همچنین از حلقه ها برای…
#ام_دی_کورس
حلقههای While در Bash
حلقه While یکی دیگر از حلقههای محبوبه که میتونید در اسکریپتهای bash استفاده کنید. نحو کلی برای یک حلقه while:
حلقه های Until در Bash
اگه قبلا با حلقه ها در بقیه ی زبان های برنامه نویسی کارد کرده باشید، احتمالا به دنبال حلقه do-while در bash هستید، اما این اینجا وجود نداره.
نوع دیگه ای از حلقه در bash وجود داره. حلقه until که سینتکسش مشابه حلقه while هست:
به عنوان مثال، میشه به راحتی اسکریپت
ادامه در پست بعدی...
🆔 @MdDaily
حلقههای While در Bash
حلقه While یکی دیگر از حلقههای محبوبه که میتونید در اسکریپتهای bash استفاده کنید. نحو کلی برای یک حلقه while:
while [ condition ]; doبه عنوان مثال، اسکریپت
[COMMANDS]
done
3x10.sh زیر از یک حلقه While استفاده میکنه که ده مضرب اول عدد سه را چاپ میکنه:#!/bin/bashبخشی از خروجی اسکریپت بالا:
num=1
while [ $num -le 10 ]; do
echo $(($num * 3))
num=$(($num+1))
done
linux@ubuntu:~$ ./3x10.shابتدا متغیر
3
6
9
12
15
18
num را با 1 مقداردهی اولیه میکنه. بعدش، حلقه While تا زمانی که num کمتر یا مساوی 10 باشه اجرا میشه. در داخل بدنه حلقه while، دستور echo مقدار num ضرب شده در 3 را چاپ میکنه و بعدش num را یکی افزایش میده.حلقه های Until در Bash
اگه قبلا با حلقه ها در بقیه ی زبان های برنامه نویسی کارد کرده باشید، احتمالا به دنبال حلقه do-while در bash هستید، اما این اینجا وجود نداره.
نوع دیگه ای از حلقه در bash وجود داره. حلقه until که سینتکسش مشابه حلقه while هست:
until [ condition ]; doتفاوت کلیدی بین حلقه until و حلقه while در condition عه. یه حلقه while تا زمانی که condition یا همون شرط true باشه اجرا میشه ولی یه حلقه until تا زمانی که condition یا همون شرط false باشد، اجرا میشه!
[COMMANDS]
Done
به عنوان مثال، میشه به راحتی اسکریپت
3x10.sh را با یک حلقه until به جای یک حلقه while بازنویسی کرد:#!/bin/bashتوجه داشته باشید که نفی شرط
num=1
until [ $num -gt 10 ]; do
echo $(($num * 3))
num=$(($num+1))
done
[ $num -le 10 ]; در اینجا[ $num -gt 10 ]; هستش.ادامه در پست بعدی...
🆔 @MdDaily
❤🔥1❤1
Md Daily
#ام_دی_کورس حلقههای While در Bash حلقه While یکی دیگر از حلقههای محبوبه که میتونید در اسکریپتهای bash استفاده کنید. نحو کلی برای یک حلقه while: while [ condition ]; do [COMMANDS] done به عنوان مثال، اسکریپت 3x10.sh زیر از یک حلقه While استفاده میکنه…
#ام_دی_کورس
چاپ محتوای یک آرایه در bash
حلقههای For اغلب محبوبترین انتخاب برای تکرار عناصر آرایه هستند.
به عنوان مثال، اسکریپت
گاهی اوقات ممکنه بخواهید یک حلقه را زودتر از موعد خاتمه دهید یا یک تکرار حلقه را رد کنید. برای انجام این کار، میتونید از دستورهای break و continue استفاده کنید.
دستور break اجرای یک حلقه را خاتمه میده و کنترل برنامه را به دستور یا دستورالعمل بعدی پس از حلقه تبدیل میکنه.
به عنوان مثال، حلقه زیر فقط اعداد یک تا سه را چاپ میکند:
به عنوان مثال، اسکریپت
یک حلقه بینهایت حلقهای است که برای همیشه اجرا میشود. این زمانی اتفاق میافتد که شرط حلقه همیشه true باشد.
در اکثر موارد، حلقه های بی نهایت محصول خطای منطقی انسان هستند.
به عنوان مثال، کسی که ممکن است بخواهد حلقه ای ایجاد کند که اعداد 1 تا 10 را به ترتیب نزولی چاپ کند، ممکن است به اشتباه حلقه بی نهایت زیر را ایجاد کند:
🆔 @MdDaily
چاپ محتوای یک آرایه در bash
حلقههای For اغلب محبوبترین انتخاب برای تکرار عناصر آرایه هستند.
به عنوان مثال، اسکریپت
prime.sh زیر بر روی هر عنصر در آرایه prime تکرار میشه و چاپش میکنه:#!/bin/bashنمونه خروجی:
prime=(2 3 5 7 11 13 17 19 23 29)
for i in "${prime[@]}"; do
echo $i
done
linux@ubuntu:~$ ./prime.shاستفاده از Break و Continue در حلقه های bash
2
3
5
7
گاهی اوقات ممکنه بخواهید یک حلقه را زودتر از موعد خاتمه دهید یا یک تکرار حلقه را رد کنید. برای انجام این کار، میتونید از دستورهای break و continue استفاده کنید.
دستور break اجرای یک حلقه را خاتمه میده و کنترل برنامه را به دستور یا دستورالعمل بعدی پس از حلقه تبدیل میکنه.
به عنوان مثال، حلقه زیر فقط اعداد یک تا سه را چاپ میکند:
for ((i=1;i<=10;i++)); doهمچنین میتوانید از عبارت continue برای نادیده گرفتن یک تکرار حلقه استفاده کنید. حلقه ادامه مییابد و به تکرار بعدی میرود، اما دستورات بعد از عبارات continue در آن تکرار خاص نادیده گرفته میشوند.
echo $i
if [ $i -eq 3 ]; then
break
fi
done
به عنوان مثال، اسکریپت
odd.sh زیر فقط اعداد فرد از یک تا ده را چاپ میکند، زیرا همه اعداد زوج را نادیده میگیرد:#!/bin/bashنمونه خروجی:
for ((i=0;i<=10;i++)); do
if [ $(($i % 2)) -ne 1 ]; then
continue
fi
echo $i
done
linux@ubuntu:~$ ./odd.shحلقههای بینهایت در bash
1
3
5
7
9
یک حلقه بینهایت حلقهای است که برای همیشه اجرا میشود. این زمانی اتفاق میافتد که شرط حلقه همیشه true باشد.
در اکثر موارد، حلقه های بی نهایت محصول خطای منطقی انسان هستند.
به عنوان مثال، کسی که ممکن است بخواهد حلقه ای ایجاد کند که اعداد 1 تا 10 را به ترتیب نزولی چاپ کند، ممکن است به اشتباه حلقه بی نهایت زیر را ایجاد کند:
for ((i=10;i>0;i++)); doمشکل این است که حلقه متغیر i را به اندازه 1 افزایش می دهد. برای رفع آن، باید i++ را با i-- به صورت زیر تغییر دهید:
echo $i
done
for ((i=10;i>0;i--)); doدر برخی موارد، ممکن است بخواهید به طور عمدی حلقه های بی نهایت ایجاد کنید تا منتظر انجام یک condition خارجی یا همون external در سیستم باشید. می توانید به راحتی یک حلقه for بی نهایت به صورت زیر ایجاد کنید:
echo $i
done
for ((;;)); doاگر می خواهید به جای آن یک حلقه while بی نهایت ایجاد کنید، می توانید آن را به صورت زیر ایجاد کنید:
[COMMANDS]
done
while [ true ]; doادامه در پست بعدی...
[COMMANDS]
done
🆔 @MdDaily
❤🔥1❤1
#ام_دی_کورس
استفاده از توابع در Bash
هیچ کدی رو دوباره ننویس، از تابع استفاده کن!
وقتی کدهای bashت بزرگ و بزرگ میشن، همه چی میتونه درهم و برهم بشه!
ممکنه ببینی که یه سری کد رو بارها و بارها تو قسمت های مختلف کد bashت دوباره مینویسی.
خوشبختانه، میتونی با استفاده از توابع در bash از دوباره نوشتن کد جلوگیری کنی که کدهات رو منظم تر و قابل خوندن تر می کنه.
تو این آموزش، یاد میگیریم که چطور تابع بسازیم، مقدار تابع رو برگردونیم، و آرگومان تابع رو تو اسکریپت های bash پاس بدیم.
علاوه بر این، یاد میگیریم که اسکوپ متغیرها(variables scope) چطور کار میکنه و چطور توابع بازگشتی رو تعریف کنیم.
ایجاد توابع در Bash
دو سینتکس مختلف برای ایجاد تابع bash وجود داره. سینتکس زیر رایج ترین روش ایجاد تابع bash هست:
👈یک تابع توابع هرگز اجرا نمیشه مگر اینکه تابع فراخوانی بشه.
👈تعریف تابع باید قبل از هر فراخوانی به تابع باشه.
هر وقت که بخواهیم تابعی اجرا بشه، فقط کافیه اون رو فراخوانی کنیم! فراخوانی تابع صرفا با اشاره به نام تابع انجام میشه.
به اسکریپت
🆔 @MdDaily
استفاده از توابع در Bash
هیچ کدی رو دوباره ننویس، از تابع استفاده کن!
وقتی کدهای bashت بزرگ و بزرگ میشن، همه چی میتونه درهم و برهم بشه!
ممکنه ببینی که یه سری کد رو بارها و بارها تو قسمت های مختلف کد bashت دوباره مینویسی.
خوشبختانه، میتونی با استفاده از توابع در bash از دوباره نوشتن کد جلوگیری کنی که کدهات رو منظم تر و قابل خوندن تر می کنه.
تو این آموزش، یاد میگیریم که چطور تابع بسازیم، مقدار تابع رو برگردونیم، و آرگومان تابع رو تو اسکریپت های bash پاس بدیم.
علاوه بر این، یاد میگیریم که اسکوپ متغیرها(variables scope) چطور کار میکنه و چطور توابع بازگشتی رو تعریف کنیم.
ایجاد توابع در Bash
دو سینتکس مختلف برای ایجاد تابع bash وجود داره. سینتکس زیر رایج ترین روش ایجاد تابع bash هست:
function_name () {
commands
}
روش دوم و کمتر رایج برای ایجاد تابع bash با کلمه کلیدی function شروع میشه و به دنبال اون نام تابع به صورت زیر هست:function function_name {
commands
}
حالا چند نکته مهم وجود داره که باید هنگام کار با توابع به اونها توجه کنیم:👈یک تابع توابع هرگز اجرا نمیشه مگر اینکه تابع فراخوانی بشه.
👈تعریف تابع باید قبل از هر فراخوانی به تابع باشه.
هر وقت که بخواهیم تابعی اجرا بشه، فقط کافیه اون رو فراخوانی کنیم! فراخوانی تابع صرفا با اشاره به نام تابع انجام میشه.
به اسکریپت
fun.sh زیر نگاه کنید:#!/bin/bashمن تو این اسکریپت، تابعی به اسم hello تعریف کردم که به سادگی خط "Hello World" رو تو ترمینال نشون میده. توجه کنید که من سه بار تابع hello رو صدا زدم و بنابراین اگر اسکریپت رو اجرا کنیم، خط "Hello World" سه بار روی صفحه چاپ میشه:
hello () {
echo "Hello World"
}
hello
hello
hello
linux@ubuntu:~$ ./fun.shادامه در پست بعدی...
Hello World
Hello World
Hello World
🆔 @MdDaily
❤🔥1❤1👍1
Md Daily
#ام_دی_کورس استفاده از توابع در Bash هیچ کدی رو دوباره ننویس، از تابع استفاده کن! وقتی کدهای bashت بزرگ و بزرگ میشن، همه چی میتونه درهم و برهم بشه! ممکنه ببینی که یه سری کد رو بارها و بارها تو قسمت های مختلف کد bashت دوباره مینویسی. خوشبختانه، میتونی…
#ام_دی_کورس
بازگشت مقادیر تابع در Bash
💡 در بسیاری از زبانهای برنامهنویسی، توابع هنگام صدا زدن مقداری رو برمیگردونند. اما این مورد در Bash صدق نمیکنه! چون توابع Bash مقادیری رو برنمیگردونند.
وقتی اجرای یک تابع Bash به پایان میرسه، وضعیت خروج آخرین دستور اجرا شده که در متغیر
میتونید از دستور return برای تغییر وضعیت خروج تابع استفاده کنید. برای مثال، به اسکریپت
همچنین باید توجه داشته باش که دستور return بلافاصله یک تابع رو خاتمه می ده.
ادامه در پست بعدی...
🆔 @MdDaily
بازگشت مقادیر تابع در Bash
💡 در بسیاری از زبانهای برنامهنویسی، توابع هنگام صدا زدن مقداری رو برمیگردونند. اما این مورد در Bash صدق نمیکنه! چون توابع Bash مقادیری رو برنمیگردونند.
وقتی اجرای یک تابع Bash به پایان میرسه، وضعیت خروج آخرین دستور اجرا شده که در متغیر
$? ذخیره شده است رو برمیگردونه. صفر نشاندهنده اجرای موفقیتآمیز یا یک عدد صحیح مثبت غیر صفر (1-255) برای نشاندادن شکست است.میتونید از دستور return برای تغییر وضعیت خروج تابع استفاده کنید. برای مثال، به اسکریپت
error.sh زیر نگاه کنید:#! /bin/bashاگر اسکریپت
error () {
blabla
return 0
}
error
echo "The return status of the error function is: $?"
error.sh رو اجرا کنید، ممکنه از خروجی تعجب کنید:linux@ubuntu:~$ ./error.shبدون دستور return 0، تابع error هرگز وضعیت خروج غیر صفر رو برنمی گردونه زیرا blabla منجر به خطای command not found می شه.
./error.sh: line 4: blabla: command not found
The return status of the error function is: 0
همچنین باید توجه داشته باش که دستور return بلافاصله یک تابع رو خاتمه می ده.
ادامه در پست بعدی...
🆔 @MdDaily
❤🔥1❤1
Md Daily
#ام_دی_کورس بازگشت مقادیر تابع در Bash 💡 در بسیاری از زبانهای برنامهنویسی، توابع هنگام صدا زدن مقداری رو برمیگردونند. اما این مورد در Bash صدق نمیکنه! چون توابع Bash مقادیری رو برنمیگردونند. وقتی اجرای یک تابع Bash به پایان میرسه، وضعیت خروج آخرین…
#ام_دی_کورس
ارسال آرگومان به تابع bash
میتونیم آرگومانها رو به یه تابع درست مثل آرگومانهایی که به یه اسکریپت bash میفرستیم، بفرستیم. فقط آرگومانها رو موقع فراخوانی تابع وارد میکنیم.
برای نشون دادنش توی عمل، بیایید نگاهی به اسکریپت
بیایید اسکریپت
ادامه در پست بعدی...
🆔 @MdDaily
ارسال آرگومان به تابع bash
میتونیم آرگومانها رو به یه تابع درست مثل آرگومانهایی که به یه اسکریپت bash میفرستیم، بفرستیم. فقط آرگومانها رو موقع فراخوانی تابع وارد میکنیم.
برای نشون دادنش توی عمل، بیایید نگاهی به اسکریپت
iseven.sh زیر بندازیم:#!/bin/bashتابع iseven() تست میکنه که یه عدد زوجه یا فرد. من چهار فراخوانی تابع برای iseven() انجام دادم. برای هر فراخوانی تابع، من یه عدد رو ارائه دادم
iseven () {
if [ $(($1 % 2)) -eq 0 ]; then
echo "$1 is even."
else
echo "$1 is odd."
fi
}
iseven 3
iseven 4
iseven 20
iseven 111
بیایید اسکریپت
iseven.sh رو اجرا کنیم تا مطمئن بشیم که کار میکنه:linux@ubuntu:~$ ./iseven.shهمچنین باید به خوبی آگاه باشیم که آرگومانهای تابع bash و آرگومانهای اسکریپت bash دو چیز متفاوت هستند. برای مقایسه تفاوت، نگاهی به اسکریپت
3 is odd.
4 is even.
20 is even.
111 is odd.
funarg.sh زیر بندازیم:#!/bin/bashاسکریپت رو با چند آرگومان اجرا میکنیم و نتیجه:
fun () {
echo "$1 is the first argument to fun()"
echo "$2 is the second argument to fun()"
}
echo "$1 is the first argument to the noscript."
echo "$2 is the second argument to the noscript."
fun Yes 7
linux@ubuntu:~$ ./funarg.sh Cool Stuffهمانطور که میبینید، حتی اگر از همون متغیرهای $1 و $2 برای اشاره به آرگومانهای اسکریپت و آرگومانهای تابع استفاده بشه، آنها نتایج متفاوتی رو هنگام فراخوانی از داخل یه تابع تولید میکنن.
Cool is the first argument to the noscript.
Stuff is the second argument to the noscript.
Yes is the first argument to fun()7 is the second argument to fun()
ادامه در پست بعدی...
🆔 @MdDaily
❤1❤🔥1👏1
Md Daily
#ام_دی_کورس ارسال آرگومان به تابع bash میتونیم آرگومانها رو به یه تابع درست مثل آرگومانهایی که به یه اسکریپت bash میفرستیم، بفرستیم. فقط آرگومانها رو موقع فراخوانی تابع وارد میکنیم. برای نشون دادنش توی عمل، بیایید نگاهی به اسکریپت iseven.sh زیر…
#ام_دی_کورس
متغیرهای محلی(Local) و سراسری(global) در توابع bash
متغیرهای bash میتونن دو تا دامنه داشته باشن: global و Local. متغیرهای global رو میشه از هر جای یه اسکریپت bash بهشون دسترسی داشت، اما متغیرهای Local فقط از داخل تابعی که تعریف شدن قابل دسترسی هستن.
برای مثال، به اسکریپت bash زیر نگاه کنید:
حالا بیایید اسکریپت را اجرا کنیم:
👈یک متغیر محلی که نامی مشابه یک متغیر سراسری دارد، بر متغیرهای سراسری در داخل بدنه تابع اولویت خواهد داشت.
👈میشه یک متغیر سراسری را از داخل یک تابع تغییر داد.
ادامه در پست بعدی...
🆔 @MdDaily
متغیرهای محلی(Local) و سراسری(global) در توابع bash
متغیرهای bash میتونن دو تا دامنه داشته باشن: global و Local. متغیرهای global رو میشه از هر جای یه اسکریپت bash بهشون دسترسی داشت، اما متغیرهای Local فقط از داخل تابعی که تعریف شدن قابل دسترسی هستن.
برای مثال، به اسکریپت bash زیر نگاه کنید:
#!/bin/bashابتدا دو متغیر سراسری v1 و v2 تعریف کردم. سپس در داخل تعریف myfun()، از کلمه کلیدی local برای تعریف یک متغیر محلی v1 و تغییر متغیر سراسری v2 استفاده کردم. توجه داشته باشید که میتونید از یک نام متغیر برای متغیرهای محلی در توابع مختلف استفاده کنید.
v1='A'
v2='B'
myfun() {
local v1='C'
v2='D'
echo "Inside myfun(): v1: $v1, v2: $v2"
}
echo "Before calling myfun(): v1: $v1, v2: $v2"
myfun
echo "After calling myfun(): v1: $v1, v2: $v2"
حالا بیایید اسکریپت را اجرا کنیم:
linux@ubuntu:~$ ./scope.shاز خروجی اسکریپت، میشه موارد زیر را نتیجه گرفت:
Before calling myfun(): v1: A, v2: B
Inside myfun(): v1: C, v2: D
After calling myfun(): v1: A, v2: D
👈یک متغیر محلی که نامی مشابه یک متغیر سراسری دارد، بر متغیرهای سراسری در داخل بدنه تابع اولویت خواهد داشت.
👈میشه یک متغیر سراسری را از داخل یک تابع تغییر داد.
ادامه در پست بعدی...
🆔 @MdDaily
👍2❤🔥1❤1
Md Daily
#ام_دی_کورس متغیرهای محلی(Local) و سراسری(global) در توابع bash متغیرهای bash میتونن دو تا دامنه داشته باشن: global و Local. متغیرهای global رو میشه از هر جای یه اسکریپت bash بهشون دسترسی داشت، اما متغیرهای Local فقط از داخل تابعی که تعریف شدن قابل دسترسی…
#ام_دی_کورس
توابع بازگشتی(Recursive functions)
یه تابع بازگشتی، تابعی هست که خودش رو فراخوانی میکنه! توابع بازگشتی زمانی مفید هستن که بخوای یه مشکل برنامهنویسی رو حل کنی که میتونه به زیرمشکلات کوچیکتر تقسیم بشه.
تابع فاکتوریل یه مثال کلاسیک از یه تابع بازگشتی هست. به اسکریپت bash زیر نگاه کن:
🆔 @MdDaily
توابع بازگشتی(Recursive functions)
یه تابع بازگشتی، تابعی هست که خودش رو فراخوانی میکنه! توابع بازگشتی زمانی مفید هستن که بخوای یه مشکل برنامهنویسی رو حل کنی که میتونه به زیرمشکلات کوچیکتر تقسیم بشه.
تابع فاکتوریل یه مثال کلاسیک از یه تابع بازگشتی هست. به اسکریپت bash زیر نگاه کن:
#!/bin/bashهر تابع بازگشتی باید با یک مورد پایه(base case) شروع شود که برای پایان دادن به زنجیره فراخوانی های تابع بازگشتی ضروری است. در تابع factorial()، مورد پایه به صورت زیر تعریف شده است:
factorial () {
if [ $1 -le 1 ]; then
echo 1
else
last=$(factorial $(( $1 -1)))
echo $(( $1 * last ))
fi
}
echo -n "4! is: "
factorial 4
echo -n "5! is: "
factorial 5
echo -n "6! is: "
factorial 6
if [ $1 -le 1 ]; thenاکنون مورد بازگشتی را برای تابع فاکتوریل استخراج کنید. برای محاسبه فاکتوریل یک عدد n که n یک عدد مثبت بزرگتر از یک است، می توانید n را در فاکتوریل n-1 ضرب کنید:
echo 1
factorial(n) = n * factorial(n-1)بیایید از معادله بالا برای نوشتن این مورد بازگشتی استفاده کنیم:
last=$(factorial $(( $1 -1)))حالا اسکریپت را اجرا میکنیم تا مطمئن بشیم که نتایج درست هستند:
echo $(( $1 * last ))
linux@ubuntu:~$ ./factorial.shادامه در پست بعدی...
4! is: 24
5! is: 120
6! is: 720
🆔 @MdDaily
❤2❤🔥1
❤2🔥1
#ام_دی_کورس
حالا می تونیم از تمام مهارت های bash که توی این سری آموزش bash یاد گرفتیم، برای ساختن برنامه های bash خیلی مفیدی استفاده کنیم که بهمون کمک کنه وظایف تکراری و کسل کننده رو خودکار کنیم.
تو این آموزش، ما چند برنامه اتوماسیون مینویسیم که می تونید بعداً برای خودکار کردن هر کاری که می خواهید، اون ها رو گسترش بدید. این برنامه ها از آرایه ها، if-else، حلقه ها و سایر مفاهیمی که توی این سری یاد گرفتیم استفاده می کنن.
پس با من همراه باشید :)
ادامه در پست بعدی...
🆔 @MdDaily
حالا می تونیم از تمام مهارت های bash که توی این سری آموزش bash یاد گرفتیم، برای ساختن برنامه های bash خیلی مفیدی استفاده کنیم که بهمون کمک کنه وظایف تکراری و کسل کننده رو خودکار کنیم.
تو این آموزش، ما چند برنامه اتوماسیون مینویسیم که می تونید بعداً برای خودکار کردن هر کاری که می خواهید، اون ها رو گسترش بدید. این برنامه ها از آرایه ها، if-else، حلقه ها و سایر مفاهیمی که توی این سری یاد گرفتیم استفاده می کنن.
پس با من همراه باشید :)
ادامه در پست بعدی...
🆔 @MdDaily
❤2
#ام_دی_کورس
اتوماسیون مدیریت کاربر با اسکریپت bash
به عنوان یک مدیر سیستم، ممکن است ایجاد یک کاربر در چندین سرور به صورت روزانه برای شما اتفاق بیفتد. این یک کار خسته کنندسش، بنابراین بیایید یک اسکریپت bash ایجاد کنیم که آن را به صورت خودکار انجام دهد.
ابتدا یک فایل متنی ایجاد کنید که شامل تمام نام میزبانها یا آدرسهای IP سرورهایی باشد که میخواهید کاربر را به آنها اضافه کنید.
به عنوان مثال، من در اینجا فایلی به نام servers.txt ایجاد کردم که شامل پنج سرور مختلف است:
بریم سراغ اسکریپت
ادامه در پست بعدی...
🆔 @MdDaily
اتوماسیون مدیریت کاربر با اسکریپت bash
به عنوان یک مدیر سیستم، ممکن است ایجاد یک کاربر در چندین سرور به صورت روزانه برای شما اتفاق بیفتد. این یک کار خسته کنندسش، بنابراین بیایید یک اسکریپت bash ایجاد کنیم که آن را به صورت خودکار انجام دهد.
ابتدا یک فایل متنی ایجاد کنید که شامل تمام نام میزبانها یا آدرسهای IP سرورهایی باشد که میخواهید کاربر را به آنها اضافه کنید.
به عنوان مثال، من در اینجا فایلی به نام servers.txt ایجاد کردم که شامل پنج سرور مختلف است:
linux@ubuntu:~$ cat servers.txt💡 توجه داشته باشید که من از نامهای میزبان سرور استفاده کردم چونکه آدرسهای IP را در فایل /etc/hosts ام قرار دادم. شما همچنین میتونید در اینجا از SSH config file استفاده کنید.
server1
server2
server3
server4
server5
بریم سراغ اسکریپت
adduser.sh:#!/bin/bashاسکریپت
servers=$(cat servers.txt)
echo -n "Enter the username: "
read name
echo -n "Enter the user id: "
read uid
for i in $servers; do
echo $i
ssh $i "sudo useradd -m -u $uid ansible"
if [ $? -eq 0 ]; then
echo "User $name added on $i"
else
echo "Error on $i"
fi
done
adduser.sh ابتدا از شما میخواهد نام کاربری و شناسه کاربری کاربری رو که میخواهید اضافه کنید، وارد کنید. سپس، روی تمام سرورهای موجود در فایل servers.txt از طریق SSH لوپ میزنه و کاربر مورد نظر رو اضافه میکنه.ادامه در پست بعدی...
🆔 @MdDaily
❤2
Md Daily
#ام_دی_کورس اتوماسیون مدیریت کاربر با اسکریپت bash به عنوان یک مدیر سیستم، ممکن است ایجاد یک کاربر در چندین سرور به صورت روزانه برای شما اتفاق بیفتد. این یک کار خسته کنندسش، بنابراین بیایید یک اسکریپت bash ایجاد کنیم که آن را به صورت خودکار انجام دهد. ابتدا…
#ام_دی_کورس
بریم اسکریپتو اجرا کنیم و ببینیم چطور کار می کنه (تصویر پست)
اسکریپت با موفقیت اجرا میشه و کاربر ansible به همه پنج تا سرور اضافه میشه. چنتا نکته ی مهم:
👈 میتونید از empty ssh pass phrases استفاده یا ssh-agent رو اجرا کنید تا موقع اجرای اسکریپت مجبور نشید کلید (یا رمز عبور) وارد کنید.
👈 باید یک حساب کاربری معتبر داشته باشید که دسترسی super user (بدون نیاز به رمز عبور) در همه سرورها داشته باشه.
تصور کنید که باید یه کاربر رو به بیش از چندین سرور لینوکس مختلف اضافه کنید! اسکریپت
ادامه در پست بعدی...
🆔 @MdDaily
بریم اسکریپتو اجرا کنیم و ببینیم چطور کار می کنه (تصویر پست)
اسکریپت با موفقیت اجرا میشه و کاربر ansible به همه پنج تا سرور اضافه میشه. چنتا نکته ی مهم:
👈 میتونید از empty ssh pass phrases استفاده یا ssh-agent رو اجرا کنید تا موقع اجرای اسکریپت مجبور نشید کلید (یا رمز عبور) وارد کنید.
👈 باید یک حساب کاربری معتبر داشته باشید که دسترسی super user (بدون نیاز به رمز عبور) در همه سرورها داشته باشه.
تصور کنید که باید یه کاربر رو به بیش از چندین سرور لینوکس مختلف اضافه کنید! اسکریپت
adduser.sh قطعاً می تونه کلی وقتتون رو ذخیره کنه.ادامه در پست بعدی...
🆔 @MdDaily
❤2