Md Daily
#ام_دی_کورس ارسال آرگومانها(Passing Arguments) به Bash Scripts بریم ببینیم که چطوری میشه آرگومانها را به bash shell noscript ارسال کنیم. همچنین قرار با متغیرهای ویژه پوسته بش آشنا بشیم. آرگومانها میتونند مفید باشند، به ویژه با استفاده از بش! تا اینجا،…
#ام_دی_کورس
این اسکریپت به خوبی کار می کنه؛ با این حال، یک جایگزین بسیار بهتر وجود داره!
به جای اینکه از کاربر برای نام فایل سوال بشه، میتونیم این کار را به سادگی با pass نام فایل به عنوان یک آرگومان خط فرمان در هنگام اجرای اسکریپت مثل زیر انجام بدیم:
بنابراین در اسکریپت count_lines.sh ، میشه متغیر نام فایل را با $1 جایگزین کرد:
در نهایت، می توانید اسکریپت را اجرا کرده و هر فایلی را به عنوان آرگومان پاس بدید:
شما می توانید بیش از یک آرگومان را به اسکریپت بفرستید. به طور کلی، نحو انتقال چندین آرگومان به هر اسکریپت bash به شرح زیر هست:
💡متغیر $0 نام اسکریپت bash شما هستش
حالا میتونیم اسکریپت count_lines.sh رو به طوری ویرایش کنیم که بتونه خطوط بیش از یک فایل را بشماره:
ادامه در پست بعدی...
🆔 @MdDaily
این اسکریپت به خوبی کار می کنه؛ با این حال، یک جایگزین بسیار بهتر وجود داره!
به جای اینکه از کاربر برای نام فایل سوال بشه، میتونیم این کار را به سادگی با pass نام فایل به عنوان یک آرگومان خط فرمان در هنگام اجرای اسکریپت مثل زیر انجام بدیم:
./count_lines.sh /etc/passwd
می توان به اولین آرگومان bash (همچنین به عنوان positional parameter شناخته میشه) در اسکریپت با استفاده از متغیر $1 دسترسی داشت.بنابراین در اسکریپت count_lines.sh ، میشه متغیر نام فایل را با $1 جایگزین کرد:
#!/bin/bash💡 توجه داشته باشید که من همچنین دستور read و اولین دستور echo را حذف کردم زیرا دیگر مورد نیاز نیستند!
nlines=$(wc -l < $1)
echo "There are $nlines lines in $1"
در نهایت، می توانید اسکریپت را اجرا کرده و هر فایلی را به عنوان آرگومان پاس بدید:
./count_lines.sh /etc/groupارسال چندین آرگومان به bash shell noscript
There are 73 lines in /etc/group
شما می توانید بیش از یک آرگومان را به اسکریپت بفرستید. به طور کلی، نحو انتقال چندین آرگومان به هر اسکریپت bash به شرح زیر هست:
noscript.sh arg1 arg2 arg3 …دومین آرگومان با متغیر $2، سومین آرگومان با $3 و ... ارجاع داده میشن.
💡متغیر $0 نام اسکریپت bash شما هستش
حالا میتونیم اسکریپت count_lines.sh رو به طوری ویرایش کنیم که بتونه خطوط بیش از یک فایل را بشماره:
#!/bin/bashدرنهایت با اجرای اسکریپت و pass سه فایل به عنوان آرگومان به اسکریپت:
n1=$(wc -l < $1)
n2=$(wc -l < $2)
n3=$(wc -l < $3)
echo "There are $n1 lines in $1"
echo "There are $n2 lines in $2"
echo "There are $n3 lines in $3"
./count_lines.sh file1 file2 file3میتونیم تعداد خطوط هر کدوم از فایل ها را ببینیم
ادامه در پست بعدی...
🆔 @MdDaily
❤2❤🔥1🔥1
#ام_دی_کورس
استفاده خلاقانه از آرگومان ها در Bash Shell
دستورات زیادی در لینوکس وجود دارد.
برخی از آنها کمی پیچیده هستند، زیرا ممکن است سینتکس طولانی یا مجموعه ای طولانی از آپشن هایی داشته باشند که میتونید ازشون استفاده کنید.
خوشبختانه، میتونید از آرگومان های bash برای تبدیل یک دستور سخت به یک کار بسیار آسان استفاده کنید!
برای نشان دادن این مورد در عمل، به اسکریپت
ببینید که چطوری این کار اکنون بسیار ساده تر از تایپ کل دستور find هستش! این اثباتیه که میتونید از آرگومان ها برای تبدیل هر دستور پیچیده طولانی در لینوکس به یک اسکریپت bash ساده استفاده کنید.
اگر در مورد
ادامه در پست بعدی...
🆔 @MdDaily
استفاده خلاقانه از آرگومان ها در Bash Shell
دستورات زیادی در لینوکس وجود دارد.
برخی از آنها کمی پیچیده هستند، زیرا ممکن است سینتکس طولانی یا مجموعه ای طولانی از آپشن هایی داشته باشند که میتونید ازشون استفاده کنید.
خوشبختانه، میتونید از آرگومان های bash برای تبدیل یک دستور سخت به یک کار بسیار آسان استفاده کنید!
برای نشان دادن این مورد در عمل، به اسکریپت
find.sh زیر نگاه کنید:#!/bin/bash
find / -iname $1 2> /dev/null
این یه اسکریپت بسیار سادس که میتونه بسیار مفید باشه! هر نام فایلی را به عنوان آرگومان به اسکریپت بدید مکان فایل را برای شما پیدا میکنه (تصویر پست)ببینید که چطوری این کار اکنون بسیار ساده تر از تایپ کل دستور find هستش! این اثباتیه که میتونید از آرگومان ها برای تبدیل هر دستور پیچیده طولانی در لینوکس به یک اسکریپت bash ساده استفاده کنید.
اگر در مورد
2> /dev/null کنجکاو هستید، به این معنیه که هر پیام خطایی (مانند عدم دسترسی به فایل) روی صفحه نمایش داده نمیشهادامه در پست بعدی...
🆔 @MdDaily
❤🔥1❤1🔥1
#ام_دی_کورس
نکته مهم: متغیرهای ویژه در Bash shell
بش دارای بسیاری از متغیرهای ویژه است که خیلی مفید هستند
جدولی که توی تصویر پست هست رایج ترین متغیرهای ویژه داخلی bash را نشون میده
ادامه در پست بعدی...
🆔 @MdDaily
نکته مهم: متغیرهای ویژه در Bash shell
بش دارای بسیاری از متغیرهای ویژه است که خیلی مفید هستند
جدولی که توی تصویر پست هست رایج ترین متغیرهای ویژه داخلی bash را نشون میده
ادامه در پست بعدی...
🆔 @MdDaily
❤🔥1❤1⚡1🔥1
#ام_دی_کورس
استفاده از آرایه ها در Bash
آیا بیش از حد متغیر برای مدیریت دارید؟ استفاده از آرایه ها راه حل شماست
تا اینجای کار، شما از تعداد محدودی متغیر در اسکریپت bash خود استفاده کردید مثلا چند متغیر برای نگهداری یک یا دو نام فایل و نام کاربری ایجاد کردید.
اما اگر به بیش از چند متغیر در اسکریپت های bash نیاز داشته باشید چی میشه؟ برای مثال، فرض کنید میخواهید یک اسکریپت bash ایجاد کنید که صد ورودی مختلف را از کاربر میخونه، آیا میخواهید 100 متغیر ایجاد کنید؟
خوشبختانه، نیازی به این کار ندارید، چونکه آرایه ها راه حل بسیار بهتری ارائه میدن.
ایجاد اولین آرایه خود در یک اسکریپت bash
فرض کنید میخواهید یک اسکریپت bash به نام
راه حل سادش اینکه بیایم پنج متغیر تعریف کنیم :
دسترسی به عناصر آرایه در bash
اولین عنصر یک آرایه از شاخص 0 شروع میشه. بنابراین برای دسترسی به عنصر n ام آرایه از شاخص n-1 استفاده کنید.
برای مثال، برای چاپ مقدار عنصر دوم آرایه files، میتونید از دستور echo زیر استفاده کنید:
اسکریپت bash زیر
همچنین میتونید همه عناصر آرایه را یکجا چاپ کنید:
🆔 @MdDaily
استفاده از آرایه ها در Bash
آیا بیش از حد متغیر برای مدیریت دارید؟ استفاده از آرایه ها راه حل شماست
تا اینجای کار، شما از تعداد محدودی متغیر در اسکریپت bash خود استفاده کردید مثلا چند متغیر برای نگهداری یک یا دو نام فایل و نام کاربری ایجاد کردید.
اما اگر به بیش از چند متغیر در اسکریپت های bash نیاز داشته باشید چی میشه؟ برای مثال، فرض کنید میخواهید یک اسکریپت bash ایجاد کنید که صد ورودی مختلف را از کاربر میخونه، آیا میخواهید 100 متغیر ایجاد کنید؟
خوشبختانه، نیازی به این کار ندارید، چونکه آرایه ها راه حل بسیار بهتری ارائه میدن.
ایجاد اولین آرایه خود در یک اسکریپت bash
فرض کنید میخواهید یک اسکریپت bash به نام
timestamp.sh ایجاد کنید که زمانبندی پنج فایل مختلف رو بهروزرسانی میکنه.راه حل سادش اینکه بیایم پنج متغیر تعریف کنیم :
#!/bin/bashحالا به جای استفاده از پنج متغیر برای ذخیره مقدار پنج نام فایل، یک آرایه ایجاد میکنیم که همه نام فایل ها رو نگه داره، در اینجا نحو کلی یک آرایه در bash اومده:
file1="f1.txt"
file2="f2.txt"
file3="f3.txt"
file4="f4.txt"
file5="f5.txt"
touch $file1
touch $file2
touch $file3
touch $file4
touch $file5
array_name=(value1 value2 value3 … )
بنابراین الان میتونید یک آرایه به نام files ایجاد کنید که همه پنج نام فایلی که در اسکریپت timestamp.sh استفاده شده رو به صورت زیر ذخیره کنه:files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")
همانطور که می بینید، این بسیار تمیزتر و کارآمدتره چونکه پنج متغیر را فقط با یک آرایه جایگزین کردیم!دسترسی به عناصر آرایه در bash
اولین عنصر یک آرایه از شاخص 0 شروع میشه. بنابراین برای دسترسی به عنصر n ام آرایه از شاخص n-1 استفاده کنید.
برای مثال، برای چاپ مقدار عنصر دوم آرایه files، میتونید از دستور echo زیر استفاده کنید:
echo ${files[1]}
و برای چاپ مقدار عنصر سوم آرایه files، میتونید از دستور زیر استفاده کنید:echo ${files[2]}
و به همین ترتیب.اسکریپت bash زیر
reverse.sh همه پنج مقدار موجود در آرایه files رو به ترتیب معکوس، از آخرین عنصر آرایه شروع می کنه:#!/bin/bash💡 میدونم که ممکنه تعجب کنید که چرا این همه دستور echo و چرا از حلقه در اینجا استفاده نمی کنم. این به این دلیل است که قصد دارم مفاهیم حلقه bash را بعداً در این مجموعه معرفی کنم.
files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")
echo ${files[4]}
echo ${files[3]}
echo ${files[2]}
echo ${files[1]}
echo ${files[0]}
همچنین میتونید همه عناصر آرایه را یکجا چاپ کنید:
echo ${files[*]}
خروجی:f1.txt f2.txt f3.txt f4.txt f5.txtمیتونید تعداد کل عناصر آرایه files رو چاپ کنید، یعنی اندازه آرایه:
echo ${#files[@]}
خروجی:5و برای آپدیت کردن مقدار عنصر یک آرایه میتونید مثل مثال زیر عمل کنید:
files[0]="a.txt"ادامه در پست بعدی...
🆔 @MdDaily
❤🔥1❤1👍1🔥1
Md Daily
#ام_دی_کورس استفاده از آرایه ها در Bash آیا بیش از حد متغیر برای مدیریت دارید؟ استفاده از آرایه ها راه حل شماست تا اینجای کار، شما از تعداد محدودی متغیر در اسکریپت bash خود استفاده کردید مثلا چند متغیر برای نگهداری یک یا دو نام فایل و نام کاربری ایجاد…
#ام_دی_کورس
اضافه کردن عناصر آرایه در bash
بیایید یک آرایه ایجاد کنیم که حاوی نام توزیع های لینوکسه:
به عنوان مثال، برای اضافه کردن Kali به آرایه distros:
حذف عناصر آرایه در bash
ابتدا بیایید یک آرایه num ایجاد کنیم که اعداد از 1 تا 5 را ذخیره کنه:
حتی میتونید کل آرایه num را به همین شکل حذف کنید:
در bash، برخلاف بسیاری از زبان های برنامه نویسی دیگر، میتونید یک آرایه ایجاد کنید که حاوی انواع داده های مختلف باشه. به اسکریپت
"John" ----> String Data Type
122 ---> Integer Data Type
"sudo,developers" ---> String Data Type
"bash" ---> String Data Type
بنابراین، ذخیره انواع داده های مختلف در یک آرایه اشکالی نداره. آیا این عالی نیست؟
ادامه در پست بعدی...
🆔 @MdDaily
اضافه کردن عناصر آرایه در bash
بیایید یک آرایه ایجاد کنیم که حاوی نام توزیع های لینوکسه:
distros=("Ubuntu" "Red Hat" "Fedora")
آرایه distros در حال حاضر حاوی سه عنصره. از عملگر += برای اضافه کردن (افزودن) یک عنصر به انتهای آرایه استفاده میشه.به عنوان مثال، برای اضافه کردن Kali به آرایه distros:
distros+=("Kali")
حالا آرایه distros دقیقاً حاوی چهار عنصره، با Kali به عنوان آخرین عنصر آرایه.حذف عناصر آرایه در bash
ابتدا بیایید یک آرایه num ایجاد کنیم که اعداد از 1 تا 5 را ذخیره کنه:
num=(1 2 3 4 5)میتونید همه مقادیر موجود در آرایه num رو چاپ کنید:
echo ${num[*]}
1 2 3 4 5
میتونیم عنصر سوم آرایه num را با استفاده از کلمه کلیدی unset حذف کنیم:unset num[2]
حالا اگه همه مقادیر آرایه num را چاپ کنیم:echo ${num[*]}
1 2 4 5
همانطور که می بینید، عنصر سوم آرایه num حذف شده.حتی میتونید کل آرایه num را به همین شکل حذف کنید:
unset numایجاد آرایه های ترکیبی با انواع داده های مختلف
در bash، برخلاف بسیاری از زبان های برنامه نویسی دیگر، میتونید یک آرایه ایجاد کنید که حاوی انواع داده های مختلف باشه. به اسکریپت
user.sh زیر نگاه کنید:#!/bin/bashتوجه داشته باشید که آرایه user حاوی چهار عنصره:
user=("john" 122 "sudo,developers" "bash")
echo "User Name: ${user[0]}"
echo "User ID: ${user[1]}"
echo "User Groups: ${user[2]}"
echo "User Shell: ${user[3]}"
"John" ----> String Data Type
122 ---> Integer Data Type
"sudo,developers" ---> String Data Type
"bash" ---> String Data Type
بنابراین، ذخیره انواع داده های مختلف در یک آرایه اشکالی نداره. آیا این عالی نیست؟
ادامه در پست بعدی...
🆔 @MdDaily
❤1🔥1
Md Daily
#ام_دی_کورس اضافه کردن عناصر آرایه در bash بیایید یک آرایه ایجاد کنیم که حاوی نام توزیع های لینوکسه: distros=("Ubuntu" "Red Hat" "Fedora") آرایه distros در حال حاضر حاوی سه عنصره. از عملگر += برای اضافه کردن (افزودن) یک عنصر به انتهای آرایه استفاده…
#ام_دی_کورس
استفاده از عملگرهای ریاضی در اسکریپتنویسی Bash
بریم ببینیم که چطوری عملیات حسابی مانند جمع، تفریق، ضرب و تقسیم را در اسکریپت های Bash انجام بدیم.
بیایید کمی ریاضی Bash انجام بدیم!
موقع نوشتن اسکریپت های Bash، متوجه میشید که نیاز دارید نتیجه یک محاسبه حسابی رو برای تعیین فضای دیسک باقی مانده، اندازه فایل ها، تاریخ انقضای رمز عبور، تعداد هاست ها، پهنای باند شبکه و غیره رو بدونید.
عملگرهای حسابی در bash:
- جمع (+)
- تفریق (-)
- ضرب (*)
- تقسیم (/)
- باقی مانده (%)
- توان (**)
انجام جمع و تفریق در اسکریپت های bash
بیایید یک اسکریپت bash به نام
شما باید تا اینجای کار با آرگومان ها در اسکریپت های bash آشنا شده باشید. اینجا قرار از دستورات cut و du استفاده کنیم .
دستور du اندازه فایل را به شما میده. خروجیش شامل اندازه و نام فایل هم هست. این جایی است که دستور cut برای استخراج ستون اول (یعنی اندازه فایل) از خروجی استفاده میشه. خروجی دستور du با استفاده از pipe redirection به دستور cut منتقل میشه.
اسکریپت:
بیایید یک اسکریپت bash به نام
همچنین میتونید از عملگر تقسیم (/) برای تقسیم دو عدد استفاده کنید. برای مثال، مقدار متغیر div در عبارت زیر برابر پنج میشه:
ادامه در پست بعدی...
🆔 @MdDaily
استفاده از عملگرهای ریاضی در اسکریپتنویسی Bash
بریم ببینیم که چطوری عملیات حسابی مانند جمع، تفریق، ضرب و تقسیم را در اسکریپت های Bash انجام بدیم.
بیایید کمی ریاضی Bash انجام بدیم!
موقع نوشتن اسکریپت های Bash، متوجه میشید که نیاز دارید نتیجه یک محاسبه حسابی رو برای تعیین فضای دیسک باقی مانده، اندازه فایل ها، تاریخ انقضای رمز عبور، تعداد هاست ها، پهنای باند شبکه و غیره رو بدونید.
عملگرهای حسابی در bash:
- جمع (+)
- تفریق (-)
- ضرب (*)
- تقسیم (/)
- باقی مانده (%)
- توان (**)
انجام جمع و تفریق در اسکریپت های bash
بیایید یک اسکریپت bash به نام
addition.sh ایجاد کنیم که به سادگی دو اندازه فایل (بر حسب بایت) را جمع میکنه و خروجی را نشون میده.شما باید تا اینجای کار با آرگومان ها در اسکریپت های bash آشنا شده باشید. اینجا قرار از دستورات cut و du استفاده کنیم .
دستور du اندازه فایل را به شما میده. خروجیش شامل اندازه و نام فایل هم هست. این جایی است که دستور cut برای استخراج ستون اول (یعنی اندازه فایل) از خروجی استفاده میشه. خروجی دستور du با استفاده از pipe redirection به دستور cut منتقل میشه.
اسکریپت:
#!/bin/bashتوجه داشته باشید که شما دو نام فایل را به عنوان آرگومان به اسکریپت منتقل خواهید کرد. برای مثال، در اینجا من اسکریپت را اجرا کردم و دو فایل /etc/passwd و /etc/group را به عنوان آرگومان پاس دادم:
fs1=$(du -b $1 | cut -f1)
fs2=$(du -b $2 | cut -f1)
echo "File size of $1 is: $fs1"
echo "File size of $2 is: $fs2"
total=$(($fs1 + $fs2))
echo "Total size is: $total"
linux@ubuntu:~/noscripts$ ./addition.sh /etc/passwd /etc/groupمهمترین خط در اسکریپت
File size of /etc/passwd is: 2795
File size of /etc/group is: 1065
Total size is: 3860
addition.sh :total=$(($fs1 + $fs2))که در این خط از عملگر + برای جمع دو عدد $fs1 و $fs2 استفاده شده. توجه داشته باشید که برای ارزیابی هر عبارت حسابی باید آن را در بین دو پرانتز دوتایی قرار بدید:
$((arithmetic-expression))همچنین میتونید از عملگر (-) برای تفریق استفاده کنید. برای مثال، مقدار متغیر sub در عبارت زیر هفت خواهد بود:
sub=$((10-3))انجام ضرب و تقسیم در اسکریپت های bash
بیایید یک اسکریپت bash به نام
giga2mega.sh ایجاد کنیم که گیگابایت (GB) را به مگابایت (MB) تبدیل میکنه:#!/bin/bashاکنون بیایید اسکریپت را اجرا کنیم تا بفهمیم در چهار گیگابایت چند مگابایت وجود داره:
GIGA=$1
MEGA=$(($GIGA * 1024))
echo "$GIGA GB is equal to $MEGA MB"
linux@ubuntu:~/noscripts$ ./giga2mega.sh 4در اینجا من از عملگر ضرب (*) برای ضرب تعداد گیگابایت در 1024 استفاده کردم تا مگابایت معادلش رو بدست بیارم:
4 GB is equal to 4096 MB
MEGA=$(($GIGA * 1024))اضافه کردن عملکرد بیشتر برای تبدیل گیگابایت به کیلوبایت هم آسونه:
KILO=$(($GIGA * 1024 * 1024))✏️ تبدیل گیگابایت به بایت را به عنوان تمرین انجام بدید!
همچنین میتونید از عملگر تقسیم (/) برای تقسیم دو عدد استفاده کنید. برای مثال، مقدار متغیر div در عبارت زیر برابر پنج میشه:
div=$((20 / 4))توجه داشته باشید که این یک تقسیم صحیح است و کسرها حذف میشن. برای مثال، اگر 5 را بر 2 تقسیم کنید، عدد 2 به دست میآید که البته اشتباهه:
linux@ubuntu:~/noscripts$ div=$((5 / 2))برای دریافت خروجی اعشاری، میتونید از دستور bc استفاده کنید. برای مثال، برای تقسیم 5 بر 2 با دستور bc:
linux@ubuntu:~/noscripts$ echo $div
2
echo "5/2" | bc -l💡 توجه داشته باشید که میتونید عملگرهای دیگه رو هم با دستور bc هنگام کار با اعداد اعشاری استفاده کنید
2.50000000000000000000
ادامه در پست بعدی...
🆔 @MdDaily
❤1👍1🔥1
Md Daily
#ام_دی_کورس استفاده از عملگرهای ریاضی در اسکریپتنویسی Bash بریم ببینیم که چطوری عملیات حسابی مانند جمع، تفریق، ضرب و تقسیم را در اسکریپت های Bash انجام بدیم. بیایید کمی ریاضی Bash انجام بدیم! موقع نوشتن اسکریپت های Bash، متوجه میشید که نیاز دارید نتیجه…
#ام_دی_کورس
استفاده از توان و باقیمانده (modulo)
بیایید یه ماشین حساب توان بسازیم! قرار یه اسکریپت به نام
بیایید چند بار اسکریپت رو اجرا کنیم تا مطمئن بشیم که پاسخ های صحیح رو میده:
تمرین: یه اسکریپت bash مبدل درجه بسازید
بیایید این مبحث از آموزش رو با ایجاد یک اسکریپت به نام
#!/bin/bash
C=$1
F=$(echo "scale=2; $C * (9/5) + 32" | bc -l)
echo " $C degrees Celsius is equal to $F degrees Fahrenheit."
از دستور bc استفاده کردم چون که با اعداد اعشاری سروکار داریم و همچنین از "scale=2" برای نمایش خروجی در دو رقم اعشاری استفاده کردم.
ادامه در پست بعدی...
🆔 @MdDaily
استفاده از توان و باقیمانده (modulo)
بیایید یه ماشین حساب توان بسازیم! قرار یه اسکریپت به نام
power.sh ایجاد کنیم که دو عدد a و b را بگیره (به عنوان آرگومان) و نتیجه a به توان b را نمایش بده:#!/bin/bash💡 توجه داشته باشید که از عملگر توان (**) برای محاسبه نتیجه a به توان b استفاده شده.
a=$1
b=$2
result=$((a**b))
echo "$1^$2=$result"
بیایید چند بار اسکریپت رو اجرا کنیم تا مطمئن بشیم که پاسخ های صحیح رو میده:
linux@ubuntu:~/noscripts$ ./power.sh 2 3همچنین میتونید از عملگر modulo (%) برای محاسبه باقیمانده های صحیح استفاده کنید. به عنوان مثال، مقدار متغیر rem در عبارت زیر برابر با 2 خواهد بود:
2^3=8
linux@ubuntu:~/noscripts$ ./power.sh 3 2
3^2=9
linux@ubuntu:~/noscripts$ ./power.sh 5 2
5^2=25
linux@ubuntu:~/noscripts$ ./power.sh 4 2
4^2=16
rem=$((17%5))✏️ خب وقت وقته تمرینه :)
تمرین: یه اسکریپت bash مبدل درجه بسازید
بیایید این مبحث از آموزش رو با ایجاد یک اسکریپت به نام
c2f.sh که درجه سانتیگراد را به درجه فارنهایت با استفاده از معادله زیر تبدیل می کنه، به پایان برسانیم:F = C x (9/5) + 32راه حل (هر راه حلی که به جواب نهایی برسه درسته من اینجا راه حل خودم رو میگم):
C=$1
F=$(echo "scale=2;
echo "
از دستور bc استفاده کردم چون که با اعداد اعشاری سروکار داریم و همچنین از "scale=2" برای نمایش خروجی در دو رقم اعشاری استفاده کردم.
🆔 @MdDaily
🔥2❤1
Md Daily
#ام_دی_کورس استفاده از توان و باقیمانده (modulo) بیایید یه ماشین حساب توان بسازیم! قرار یه اسکریپت به نام power.sh ایجاد کنیم که دو عدد a و b را بگیره (به عنوان آرگومان) و نتیجه a به توان b را نمایش بده: #!/bin/bash a=$1 b=$2 result=$((a**b)) echo "$1^$2=$result"…
#ام_دی_کورس
عملیات رشته ای (String Operations) در Bash
خب حالا وقشته که بریم سراغ string ها و ببینیم که چطوری میتونیم توی Bash باهاشون کار و دستکاریشون کنیم
دریافت طول String
با به دست آوردن طول یک رشته در بش شروع میکنیم.
یک رشته چیزی نیست جز دنباله ای (آرایه) از کاراکترها. حالا یک رشته بنام distro ایجاد میکنیم و مقدارش رو روی “Ubuntu” مقداردهی اولیه میکنیم:
الحاق دو String
میتونید یک رشته رو به انتهای رشته دیگه ای اضافه کنید که به این فرآیند الحاق(Concatenating) رشته میگن .
برای نشون دادن این مورد، ابتدا دو رشته str1 و str2 را به صورت زیر ایجاد می کنیم:
پیداکردن زیررشته ها(Finding substrings)
میتونید موقعیت (اندیس) یک حرف یا کلمه خاص را در یک رشته پیدا کنید. برای نشون دادن این مورد، ابتدا یک رشته به نام str به صورت زیر ایجاد می کنیم:
استخراج زیررشتهها (Extracting substrings)
شما همچنین میتونید زیررشتههایی را از یک رشته استخراج کنید؛ به عبارت دیگه، شما میتونید یک حرف، کلمه یا چند کلمه را از یک رشته استخراج کنید.
ابتدا یک رشته به نام foss رو ایجاد می کنیم:
بنابراین، برای استخراج زیر رشته “Fedora”، از 0 به عنوان موقعیت شروع استفاده خواهید کرد و 6 کاراکتر را از موقعیت شروع استخراج خواهید کرد:
به عنوان مثال، برای استخراج زیر رشته “free operating system” از رشته foss؛ ما فقط باید موقعیت شروع 12 را مشخص کنیم:
🆔 @MdDaily
عملیات رشته ای (String Operations) در Bash
خب حالا وقشته که بریم سراغ string ها و ببینیم که چطوری میتونیم توی Bash باهاشون کار و دستکاریشون کنیم
دریافت طول String
با به دست آوردن طول یک رشته در بش شروع میکنیم.
یک رشته چیزی نیست جز دنباله ای (آرایه) از کاراکترها. حالا یک رشته بنام distro ایجاد میکنیم و مقدارش رو روی “Ubuntu” مقداردهی اولیه میکنیم:
distro="Ubuntu"و حالا برای بدست آوردن طول رشته distro، فقط باید # رو قبل از نام متغیر اضافه کنیم. برای نمایش خرووجی هم از دستور echo استفاده میکنیم:
linux@ubuntu:~/noscripts$ echo ${#distro}
6
توجه داشته باشید که دستور echo برای چاپ مقدار است. {#string} چیزیه که طول رشته را میده.الحاق دو String
میتونید یک رشته رو به انتهای رشته دیگه ای اضافه کنید که به این فرآیند الحاق(Concatenating) رشته میگن .
برای نشون دادن این مورد، ابتدا دو رشته str1 و str2 را به صورت زیر ایجاد می کنیم:
str1="md"
str2="Daily"
حالا میتونید هر دو رشته را پیوند بدید و نتیجه را تو یه رشته جدید به نام str3 ذخیره کنید:str3=$str1$str2آسون بود نه ؟
پیداکردن زیررشته ها(Finding substrings)
میتونید موقعیت (اندیس) یک حرف یا کلمه خاص را در یک رشته پیدا کنید. برای نشون دادن این مورد، ابتدا یک رشته به نام str به صورت زیر ایجاد می کنیم:
str="Bash is Cool"حالا میتونید موقعیت خاص (اندیسی) زیر رشته cool را بدست بیارید. برای انجام این کار، از دستور
expr استفاده کنید:linux@ubuntu:
~/noscripts$ word="Cool"
linux@ubuntu:
~/noscripts$ expr index "$str" "$word"
9
نتیجه 9 اندیسی است که کلمه "Cool" در رشته str شروع می شود.استخراج زیررشتهها (Extracting substrings)
شما همچنین میتونید زیررشتههایی را از یک رشته استخراج کنید؛ به عبارت دیگه، شما میتونید یک حرف، کلمه یا چند کلمه را از یک رشته استخراج کنید.
ابتدا یک رشته به نام foss رو ایجاد می کنیم:
foss="Fedora is a free operating system"حال فرض کنید می خواهید اولین کلمه "Fedora" را در رشته foss استخراج کنید. شما نیاز دارید موقعیت (اندیس) شروع زیررشته مورد نظر و تعداد کاراکترهایی که نیاز دارید استخراج کنید را مشخص کنید.
بنابراین، برای استخراج زیر رشته “Fedora”، از 0 به عنوان موقعیت شروع استفاده خواهید کرد و 6 کاراکتر را از موقعیت شروع استخراج خواهید کرد:
linux@ubuntu:~/noscripts$ echo ${foss:0:6}
Fedora
توجه داشته باشید که اولین موقعیت در یک رشته صفره درست مثله آرایه ها در bash. شما همچنین ممکنه فقط موقعیت شروع یک زیر رشته را مشخص کنید و تعداد کاراکترها را حذف کنید. در این حالت، همه چیز از موقعیت شروع تا انتهای رشته استخراج میشه.به عنوان مثال، برای استخراج زیر رشته “free operating system” از رشته foss؛ ما فقط باید موقعیت شروع 12 را مشخص کنیم:
linux@ubuntu:~/noscripts$ echo ${foss:12}
free operating system
ادامه در پست بعدی...🆔 @MdDaily
❤1🔥1
Md Daily
#ام_دی_کورس عملیات رشته ای (String Operations) در Bash خب حالا وقشته که بریم سراغ string ها و ببینیم که چطوری میتونیم توی Bash باهاشون کار و دستکاریشون کنیم دریافت طول String با به دست آوردن طول یک رشته در بش شروع میکنیم. یک رشته چیزی نیست جز دنباله…
#ام_دی_کورس
جایگزینی زیر رشته ها(Replacing substrings)
همچنین می توانید یک زیر رشته را با زیر رشته دیگری جایگزین کنید. به عنوان مثال، میتونید "Fedora" را با "Ubuntu" در رشته "foss" جایگزین کنید:
حذف زیر رشته ها
همچنین میتونید زیر رشته ها را حذف کنید.
ابتدا یک رشته به نام "fact" ایجاد می کنیم:
برای تغییر رشته، باید نتیجه را به رشته اختصاص بدید:
میتونید یک رشته رو به حروف کوچک یا حروف بزرگ تبدیل کنید. ابتدا دو رشته به نام "legend" و "actor" ایجاد می کنیم:
🆔 @MdDaily
جایگزینی زیر رشته ها(Replacing substrings)
همچنین می توانید یک زیر رشته را با زیر رشته دیگری جایگزین کنید. به عنوان مثال، میتونید "Fedora" را با "Ubuntu" در رشته "foss" جایگزین کنید:
linux@ubuntu:~/noscripts$ echo ${foss/Fedora/Ubuntu}
Ubuntu is a free operating system
یه مثال دیگه، بیایید زیر رشته "free" رو با "popular" جایگزین کنیم:linux@ubuntu:~/noscripts$ echo ${foss/free/popular}
Fedora is a popular operating system
از اونجایی که فقط مقدار رو با دستور echo چاپ می کنیم، رشته اصلی تغییری نمی کنه.حذف زیر رشته ها
همچنین میتونید زیر رشته ها را حذف کنید.
ابتدا یک رشته به نام "fact" ایجاد می کنیم:
fact="Sun is a big star"حالا میتونید زیر رشته "big" را از رشته fact حذف کنید:
linux@ubuntu:~/noscripts$ echo ${fact/big}
Sun is a star
بیایید یک رشته دیگر به نام cell ایجاد کنیم:cell="112-358-1321"حالا فرض کنید میخواهید تمام خط تیره ها رو از رشته cell حذف کنید. دستور زیر فقط اولین خط تیره رو در رشته cell حذف می کنه:
linux@ubuntu:~/noscripts$ echo ${cell/-}
112358-1321
برای حذف تمام خط تیره ها از رشته cell، باید از دو اسلش رو به جلو استفاده کنید:linux@ubuntu:~/noscripts$ echo ${cell//-}
1123581321
توجه داشته باشید که شما از دستورهای echo استفاده می کنید و بنابراین رشته cell دست نخورده باقی میمونه و اصلاح نمیشه. شما فقط نتیجه مورد نظر را نمایش میدید!برای تغییر رشته، باید نتیجه را به رشته اختصاص بدید:
linux@ubuntu:~/noscripts$ echo $cell
112-358-1321
linux@ubuntu:~/noscripts$ cell=${cell//-}
linux@ubuntu:~/noscripts$ echo $cellتبدیل حروف بزرگ و کوچک در رشته(Converting upper and lower-case letters in string)
1123581321
میتونید یک رشته رو به حروف کوچک یا حروف بزرگ تبدیل کنید. ابتدا دو رشته به نام "legend" و "actor" ایجاد می کنیم:
legend="john nash"میتونید تمام حروف موجود در رشته legend رو به حروف بزرگ تبدیل کنید:
actor="JULIA ROBERTS"
linux@ubuntu:~/noscripts$ echo ${legend^^}
JOHN NASH
همچنین تمام حروف موجود در رشته actor را به حروف کوچک تبدیل کنید:linux@ubuntu:~/noscripts$ echo ${actor,,}
julia roberts
همچنین میتونید فقط اولین حرف رشته legend رو به حروف بزرگ تبدیل کنید:linux@ubuntu:~/noscripts$ echo ${legend^}
John nash
به همین ترتیب، میتونید فقط اولین حرف رشته actor رو به حروف کوچک تبدیل کنید:linux@ubuntu:~/noscripts$ echo ${actor,}
jULIA ROBERTS
یا هم حروف خاصی رو در یک رشته به حروف بزرگ یا کوچک تغییر بدید. به عنوان مثال، میتونید حروف "j" و "n" رو در رشته legend به حروف بزرگ تغییر بدید:linux@ubuntu~/noscripts$ echo ${legend^^[jn]}
JohN Nash
ادامه در پست بعدی...🆔 @MdDaily
❤1🔥1
#ام_دی_کورس
دستورات شرطی (if-else و case) در Bash
در این بخش از مجموعه آموزش bash، نحوه استفاده از دستورات شرط های تو در تو، if-else و case در اسکریپت های bash را یاد میگیریم.
وقتش شده که اسکریپت های bash امون رو باهوش کنیم :)
با یادگیری دستورات شرطی و مثال های عملی و کاربردی که توی این بخش زده میشه شما میتونید اسکریپت های bash بسیار کارآمدتری بنویسید
استفاده از دستور if در bash
اساسی ترین سازه در هر ساختار تصمیم گیری، شرط if است. نحو کلی یک دستور if:
❗️به فضای خالی توجه کنید!
👈 باید بین براکت های باز و بسته و شرطی که می نویسید یک فاصله وجود داشته باشه. در غیر این صورت، Shell بهتون کلی خطا میده
👈 باید قبل و بعد از عملگر شرطی (=، ==، <= و غیره) فاصله وجود داشته باشه. در غیر این صورت، خطایی مانند "unary operator expected" خواهید دید.
حالا بیایید یک اسکریپت نمونه بنام
شرط
ادامه در پست بعدی...
🆔 @MdDaily
دستورات شرطی (if-else و case) در Bash
در این بخش از مجموعه آموزش bash، نحوه استفاده از دستورات شرط های تو در تو، if-else و case در اسکریپت های bash را یاد میگیریم.
وقتش شده که اسکریپت های bash امون رو باهوش کنیم :)
با یادگیری دستورات شرطی و مثال های عملی و کاربردی که توی این بخش زده میشه شما میتونید اسکریپت های bash بسیار کارآمدتری بنویسید
استفاده از دستور if در bash
اساسی ترین سازه در هر ساختار تصمیم گیری، شرط if است. نحو کلی یک دستور if:
if [ condition ]; thenدستور if با fi (معکوس if) بسته میشه.
your code
fi
❗️به فضای خالی توجه کنید!
👈 باید بین براکت های باز و بسته و شرطی که می نویسید یک فاصله وجود داشته باشه. در غیر این صورت، Shell بهتون کلی خطا میده
👈 باید قبل و بعد از عملگر شرطی (=، ==، <= و غیره) فاصله وجود داشته باشه. در غیر این صورت، خطایی مانند "unary operator expected" خواهید دید.
حالا بیایید یک اسکریپت نمونه بنام
root.sh ایجاد کنیم. این اسکریپت عبارت "شما root هستید" را فقط در صورتی که اسکریپت را به عنوان کاربر root اجرا کنید، چاپ میکنه:#!/bin/bashدستور
if [ $(whoami) = 'root' ]; then
echo "You are root"
fi
whoami نام کاربری رو خروجی میده. از آموزش متغیرهای bash، می دانیم که $(command) برای Command Substitution استفاده میشه و خروجی دستور را به شما میده.شرط
$(whoami) = 'root' فقط در صورتی درسته که شما به عنوان کاربر root وارد شده باشید.ادامه در پست بعدی...
🆔 @MdDaily
❤1🔥1
#ام_دی_کورس
استفاده از دستور if-else در bash
وقتی اسکریپت root.sh را به عنوان یک کاربر معمولی اجرا می کنید، هیچ خروجی دریافت نمی کنید. هر کدی که می خواهید هنگام ارزیابی شرط if به عنوان false اجرا شود، میتونه در یک دستور else قرار بگیره:
هر زمان که می خواهید بیش از یک عبارت (شرط) را به طور همزمان آزمایش کنید، میتونید از دستور else if استفاده کنید.
به عنوان مثال، اسکریپت
استفاده از ifهای تودرتو در bash
شما همچنین میتونید از یک دستور if در داخل دستور if دیگری استفاده کنید. به عنوان مثال، به اسکریپت زیر
شما همچنین میتونید از دستور case در bash برای جایگزینی چندین دستور if استفاده کنید چونکه اونها گاهی اوقات گیج کننده میشن و خوندشون سخته. نحو کلی پیاده سازی case:
👈 الگوها همیشه با یک فضای خالی و
👈دستورات همیشه با دو نقطه ویرگول ;; دنبال میشن. فضای خالی قبلش اجباری نیست.
👈 دستورات case با esac (معکوس case) تموم میشن.
دستورات case به ویژه وقتی که با الگو ها یا عبارات منظم سروکار دارید مفید هستند. برای نشون دادن این مورد به اسکریپت زیر
ادامه در پست بعدی...
🆔 @MdDaily
استفاده از دستور if-else در bash
وقتی اسکریپت root.sh را به عنوان یک کاربر معمولی اجرا می کنید، هیچ خروجی دریافت نمی کنید. هر کدی که می خواهید هنگام ارزیابی شرط if به عنوان false اجرا شود، میتونه در یک دستور else قرار بگیره:
#!/bin/bashحالا اگه اسکریپت رو به عنوان یک کاربر معمولی اجرا کنید، به شما میگه که شما کاربر root نیستید:
if [ $(whoami) = 'root' ]; then
echo "You are root"
else
echo "You are not root"
fi
linux@ubuntu:~$ ./root.shاستفاده از دستور else if در bash
You are not root
هر زمان که می خواهید بیش از یک عبارت (شرط) را به طور همزمان آزمایش کنید، میتونید از دستور else if استفاده کنید.
به عنوان مثال، اسکریپت
age.sh زیر سن شما را به عنوان آرگومان می گیره و پیام معنی داری را متناسب با سن شما خروجی میده:#!/bin/bashهمچنین توجه داشته باشید که میتونید چندین دستور elif داشته باشید اما فقط یک دستور else در یک ساختار if داشته باشید و باید با fi بسته بشه.
AGE=$1
if [ $AGE -lt 13 ]; then
echo "You are a kid."
elif [ $AGE -lt 20 ]; then
echo "You are a teenager."
elif [ $AGE -lt 65 ]; then
echo "You are an adult."
else
echo "You are an elder."
fi
استفاده از ifهای تودرتو در bash
شما همچنین میتونید از یک دستور if در داخل دستور if دیگری استفاده کنید. به عنوان مثال، به اسکریپت زیر
weather.sh نگاه کنید:#!/bin/bash
TEMP=$1
if [ $TEMP -gt 5 ]; then
if [ $TEMP -lt 15 ]; then
echo "The weather is cold."
elif [ $TEMP -lt 25 ]; then
echo "The weather is nice."
else
echo "The weather is hot."
fi
else
echo "It's freezing outside ..."
fi
اسکریپت دما رو به عنوان آرگومان می گیره و بعدش پیامی را نشون میده که منعکس کننده آب و هواست. اگه دما بیشتر از پنج باشد، دستور if-elif تو در تو (درونی) ارزیابی میشه. بیایید چند بار اسکریپت را اجرا کنیم تا ببینیم چگونه کار می کند:linux@ubuntu:~$ ./weather.sh 0
It's freezing outside ...
linux@ubuntu:~$ ./weather.sh 8
The weather is cold.
linux@ubuntu:~$ ./weather.sh 16
The weather is nice.
linux@ubuntu:~$ ./weather.sh 30
The weather is hot.
استفاده از دستور case در bashشما همچنین میتونید از دستور case در bash برای جایگزینی چندین دستور if استفاده کنید چونکه اونها گاهی اوقات گیج کننده میشن و خوندشون سخته. نحو کلی پیاده سازی case:
case "variable" in❗️ توجه داشته باشید!
"pattern1" )
Command … ;;
"pattern2" )
Command … ;;
"pattern2" )
Command … ;;
esac
👈 الگوها همیشه با یک فضای خالی و
) دنبال میشن.👈دستورات همیشه با دو نقطه ویرگول ;; دنبال میشن. فضای خالی قبلش اجباری نیست.
👈 دستورات case با esac (معکوس case) تموم میشن.
دستورات case به ویژه وقتی که با الگو ها یا عبارات منظم سروکار دارید مفید هستند. برای نشون دادن این مورد به اسکریپت زیر
char.sh نگاه کنید:#!/bin/bashاسکریپت یک کاراکتر را به عنوان آرگومان میگیره و نمایش میده که آیا کاراکتر حرف کوچک/بزرگ، عدد یا یک کاراکتر خاصه.
CHAR=$1
case $CHAR in
[a-z])
echo "Small Alphabet." ;;
[A-Z])
echo "Big Alphabet." ;;
[0-9])
echo "Number." ;;
*)
echo "Special Character."
esac
linux@ubuntu:~$ ./char.sh a
Small Alphabet.
linux@ubuntu:~$ ./char.sh Z
Big Alphabet.
linux@ubuntu:~$ ./char.sh 7
Number.
linux@ubuntu:~$ ./char.sh $توجه داشته باشید که از نماد ستاره (*) برای تعریف حالت پیش فرض استفاده کردم که معادل دستور else در یک شرط if هستش.
Special Character.
ادامه در پست بعدی...
🆔 @MdDaily
❤🔥2❤1🔥1
#ام_دی_کورس
تست conditions در bash
در بش condition های زیادی وجود داره که میتونید تو دستور if استفاده کنید. شرایط بسته به اینکه با اعداد، رشتهها یا فایلها کار میکنید متفاوته ولی میشه بهشون به عنوان عملگر های منطقی نگاه کرد
برخی از محبوب ترین conditions ها رو تو جدول تصویر پست اوردم.
خوشبختانه، نیازی به حفظ هیچ یک از اینا ندارید، چونکه میتونید این ها رو در صفحه راهنمای test جستجو کنید:
🆔 @MdDaily
تست conditions در bash
در بش condition های زیادی وجود داره که میتونید تو دستور if استفاده کنید. شرایط بسته به اینکه با اعداد، رشتهها یا فایلها کار میکنید متفاوته ولی میشه بهشون به عنوان عملگر های منطقی نگاه کرد
برخی از محبوب ترین conditions ها رو تو جدول تصویر پست اوردم.
خوشبختانه، نیازی به حفظ هیچ یک از اینا ندارید، چونکه میتونید این ها رو در صفحه راهنمای test جستجو کنید:
linux@ubuntu:~$ man testادامه در پست بعدی...
🆔 @MdDaily
❤2❤🔥1
Md Daily
#ام_دی_کورس تست conditions در bash در بش condition های زیادی وجود داره که میتونید تو دستور if استفاده کنید. شرایط بسته به اینکه با اعداد، رشتهها یا فایلها کار میکنید متفاوته ولی میشه بهشون به عنوان عملگر های منطقی نگاه کرد برخی از محبوب ترین conditions…
#ام_دی_کورس
بیایید به عنوان آخرین اسکریپت مبحث دستورات شرطی یک اسکریپت به نام
بیایید چند بار اسکریپت را برای تست آن با انواع مختلف فایل اجرا کنیم:
تا کنون تمام عبارات if else ای که دیدید در یک اسکریپت bash مناسب استفاده شده بودن. این یه روش منطقی و مناسبه، ولی شما مجبور نیستید ازش استفاده کنید
وقتی که فقط میخواین نتیجه رو تو shell ببینید، میتونید از عبارات if else در یک خط در bash استفاده کنید.
فرض کنید این اسکریپت bash را دارید:
ادامه در پست بعدی...
🆔 @MdDaily
بیایید به عنوان آخرین اسکریپت مبحث دستورات شرطی یک اسکریپت به نام
filetype.sh ایجاد کنیم که تشخیص بده آیا یک فایل یک فایل معمولیه، دایرکتوریه یا soft link :#!/bin/bashمن اسکریپت را با افزودن یک بررسی در تعداد آرگومانها کمی بهبود دادم. اگه آرگومانی وجود نداشته باشه یا بیش از یک آرگومان وجود داشته باشه، اسکریپت پیامی رو چاپ میکنه و بدون اجرای بقیه عملیات های موجود از اسکریپت خارج میشه.
if [ $# -ne 1 ]; then
echo "Error: Invalid number of arguments"
exit 1
fi
file=$1
if [ -f $file ]; then
echo "$file is a regular file."
elif [ -L $file ]; then
echo "$file is a soft link."
elif [ -d $file ]; then
echo "$file is a directory."
else
echo "$file does not exist"
fi
بیایید چند بار اسکریپت را برای تست آن با انواع مختلف فایل اجرا کنیم:
linux@ubuntu:~$ ./filetype.sh weather.sh🏆 نکات تکمیلی: دستور if else در یک خط
weather.sh is a regular file.
linux@ubuntu:~$ ./filetype.sh /bin
/bin is a soft link.
linux@ubuntu:~$ ./filetype.sh /var
/var is a directory.
linux@ubuntu:~$ ./filetype.sh
Error: Invalid number of arguments
تا کنون تمام عبارات if else ای که دیدید در یک اسکریپت bash مناسب استفاده شده بودن. این یه روش منطقی و مناسبه، ولی شما مجبور نیستید ازش استفاده کنید
وقتی که فقط میخواین نتیجه رو تو shell ببینید، میتونید از عبارات if else در یک خط در bash استفاده کنید.
فرض کنید این اسکریپت bash را دارید:
if [ $(whoami) = 'root' ]; thenمیتونید از تمام عبارات if else در یک خط مثله این استفاده کنید:
echo "You are root"
else
echo "You are not root"
fi
if [ $(whoami) = 'root' ]; then echo "root"; else echo "not root"; fiدر اصل، شما فقط بعد از دستورات semicolon اضافه می کنید و بعدش دستور if-else بعدیو مینویسید.
ادامه در پست بعدی...
🆔 @MdDaily
❤2❤🔥1🔥1
#ام_دی_کورس
حلقه ها در 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