آیا می خواهید برنامه نویسی را در لینوکس یاد بگیرید؟ با Bash کنار بیایید.
خلاصه عناوین
- نحوه چاپ Hello World در Bash
- با خواندن ورودی یک دایرکتوری ایجاد کنید
- با استفاده از آرگومان های خط فرمان یک دایرکتوری ایجاد کنید
- حذف یک فایل با استفاده از یک تابع Bash
- یک ماشین حساب پایه برای محاسبات حسابی ایجاد کنید
برنامه نویسی Bash یکی از محبوب ترین و در دسترس ترین روش های برنامه نویسی کامپیوتر لینوکس شما است. این مثالهای ساده اسکریپت به شما کمک میکند تا فرآیند را درک کنید و شما را با اصول برنامهنویسی Bash آشنا کنید.
1. نحوه چاپ Hello World در Bash
مثال Hello World یک راه عالی برای یادگیری هر زبان برنامه نویسی است و Bash نیز از این قاعده مستثنی نیست.
در اینجا نحوه چاپ “Hello World” با استفاده از Bash آمده است:
- یک ویرایشگر متن را باز کنید و یک فایل جدید حاوی خطوط کد زیر را ویرایش کنید.
- خط اول اسکریپت های Bash شما همیشه باید به این صورت باشد:#!/bin/bash دستور Shebang (#!/bin/bash) ضروری است زیرا پوسته از آن برای تصمیم گیری در مورد نحوه اجرای اسکریپت استفاده می کند. در این حالت از مفسر Bash استفاده می کند.
- هر خطی که با علامت # شروع شود یک نظر است. خط shebang یک مورد خاص است، اما شما می توانید از نظرات خود برای توضیح کد خود استفاده کنید. یک نظر در خط 2 اضافه کنید، به عنوان مثال:# متنی را از یک اسکریپت bash چاپ کنید
- می توانید با استفاده از دستور echo و سپس مقداری که می خواهید چاپ کنید، در خروجی استاندارد چاپ کنید. موارد زیر را در خط 3 اضافه کنید: echo “Hello World”
- اسکریپت را ترجیحا با پسوند .sh ذخیره کنید، به عنوان مثال. hello_world.sh. تمدید یک الزام نیست، اما قراردادی است که رعایت آن مفید است.
- برای اجرای اسکریپت خود، فایل را قابل اجرا کنید. از دستور chmod (“تغییر حالت”) به همراه آرگومان +x (“قابل اجرا”) و نام اسکریپت پوسته خود استفاده کنید: chmod +x hello_world.sh
- از این دستور برای اجرای اسکریپت از داخل دایرکتوری آن استفاده کنید:./hello_world.sh
- هنگامی که اسکریپت اجرا می شود، متن “Hello World” را در ترمینال شما چاپ می کند:
#!/bin/bash
دستور Shebang (#!/bin/bash) ضروری است زیرا پوسته از آن برای تصمیم گیری در مورد نحوه اجرای اسکریپت استفاده می کند. در این حالت از مفسر Bash استفاده می کند.
# Print some text from a bash script
echo "Hello World"
chmod +x hello_world.sh
./hello_world.sh
2. با خواندن ورودی یک دایرکتوری ایجاد کنید
از اسکریپت های خود، می توانید هر برنامه ای را که معمولاً در خط فرمان اجرا می کنید، اجرا کنید. به عنوان مثال، می توانید با استفاده از دستور mkdir یک دایرکتوری جدید از اسکریپت خود ایجاد کنید.
- با همان خط shebang قبلی شروع کنید:#!/bin/bash
- با استفاده از دستور echo مانند قبل از کاربر یک نام دایرکتوری درخواست کنید: “نام دایرکتوری جدید را وارد کنید:”
- از دستور خواندن داخلی برای واکشی ورودی کاربر استفاده کنید. آرگومان واحد متغیری را نامگذاری می کند که پوسته ورودی را در:read newdir ذخیره می کند
- هنگامی که نیاز به استفاده از مقدار ذخیره شده در یک متغیر دارید، پیشوند نام آن را با نماد دلار ($) قرار دهید. می توانید محتویات متغیر ورودی را به عنوان آرگومان به دستور mkdir ارسال کنید تا یک دایرکتوری جدید ایجاد کنید: mkdir $newdir
- هنگامی که این اسکریپت را اجرا می کنید، از شما برای ورودی می خواهد. یک نام دایرکتوری معتبر وارد کنید و خواهید دید که اسکریپت آن را در دایرکتوری فعلی شما ایجاد می کند:
#!/bin/bash
echo "Enter new directory name:"
read newdir
mkdir $newdir
3. یک دایرکتوری با استفاده از آرگومان های خط فرمان ایجاد کنید
به عنوان جایگزینی برای خواندن ورودی به صورت تعاملی، اکثر دستورات لینوکس از آرگومان ها پشتیبانی می کنند. هنگام اجرای یک برنامه می توانید یک آرگومان برای کنترل رفتار آن ارائه کنید.
در اسکریپت خود، می توانید از $1 برای ارجاع به متغیر خاصی که حاوی مقدار آرگومان اول است استفاده کنید. $2 به آرگومان دوم اشاره خواهد کرد و به همین ترتیب.
- با استفاده از دستور mkdir از مثال قبلی یک دایرکتوری ایجاد کنید. با این حال، این بار، از متغیر داخلی $1:#!/bin/bashmkdir $1 استفاده کنید
- اسکریپت را اجرا کنید، این بار نام انتخابی یک فهرست جدید را به عنوان آرگومان ارسال کنید:./arg_dir.sh تست
#!/bin/bash
mkdir $1
./arg_dir.sh Test
ممکن است تعجب کنید که اگر اسکریپت را بدون ارائه هیچ استدلالی اجرا کنید چه اتفاقی می افتد. آن را امتحان کنید و ببینید؛ شما باید یک پیام خطایی دریافت کنید که “usage: mkdir” را شروع می کند:
بدون هیچ آرگومان خط فرمان، مقدار $1 خالی خواهد بود. وقتی اسکریپت شما mkdir را فراخوانی می کند، آرگومان را به آن ارسال نمی کند و دستور mkdir آن خطا را برمی گرداند. برای جلوگیری از این امر، می توانید خودتان وضعیت را بررسی کنید و خطای دوستانه تری ارائه دهید:
- مثل همیشه، با خط shebang شروع کنید:#!/bin/bash
- قبل از اینکه mkdir را فراخوانی کنید، یک آرگومان اول خالی را بررسی کنید (یعنی بدون آرگومان). می توانید این کار را با استفاده از دستور if Bash انجام دهید که کد را بر اساس یک شرط اجرا می کند:if [“$1” = “”]; سپس
- اگر آرگومان اول خالی است، یک خطا چاپ کنید و از اسکریپت خود خارج شوید: echo «لطفا یک نام دایرکتوری جدید به عنوان اولین آرگومان ارائه کنید» خروج
- کلمه کلیدی کمی عجیب “fi” (“اگر” معکوس شده) پایان یک دستور if را در Bash:fi نشان می دهد.
- اسکریپت شما اکنون می تواند مانند قبل ادامه یابد، تا زمانی که یک آرگومان وجود دارد رسیدگی کند: mkdir $1
#!/bin/bash
if ["$1" = ""]; then
echo "Please provide a new directory name as the first argument"
exit
fi
mkdir $1
هنگامی که این نسخه جدید اسکریپت را اجرا می کنید، اگر فراموش کردید یک آرگومان اضافه کنید، پیامی دریافت خواهید کرد:
4. یک فایل را با استفاده از یک تابع Bash حذف کنید
اگر متوجه شدید که همان کد را تکرار می کنید، آن را در یک تابع قرار دهید. سپس می توانید هر زمان که نیاز داشتید آن تابع را فراخوانی کنید.
در اینجا نمونه ای از تابعی است که یک فایل داده شده را حذف می کند.
- با خط shebang شروع کنید:#!/bin/bash
- یک تابع را با نوشتن نام آن و به دنبال پرانتزهای خالی و دستورات داخل براکتهای مجعد تعریف کنید:del_file() { echo “deleting $1” rm $1} سپس میتوانید تابع را فراخوانی کرده و نام فایل را برای حذف ارسال کنید:del_file test.txt
#!/bin/bash
del_file() {
echo "deleting $1"
rm $1
}
del_file test.txt
وقتی تابعی را فراخوانی میکنید، $ خاص را تنظیم میکند؟ مقدار با وضعیت خروج آخرین فرمانی که اجرا می کند. وضعیت خروج برای بررسی خطا مفید است. در این مثال، می توانید آزمایش کنید که آیا دستور rm موفق بوده است یا خیر:
if [ $? -ne 0 ]; then
echo "Sorry, could not delete the file"
fi
5. یک ماشین حساب پایه برای محاسبات حسابی ایجاد کنید
این مثال آخر یک ماشین حساب بسیار ابتدایی را نشان می دهد. هنگامی که آن را اجرا می کنید، دو مقدار را وارد می کنید، سپس یک عملیات حسابی را برای انجام روی آنها انتخاب می کنید.
در اینجا کد calc.sh آمده است:
#!/bin/bash
# Take operands as input
echo "Enter first number: "
read a
echo "Enter second number: "
read b
# Input type of operation
echo "Enter Arithmetic Operation Choice :"
echo "1. Addition"
echo "2. Subtraction"
echo "3. Multiplication"
echo "4. Division"
read choice
# calculator operations
case $choice in
1)
result=`echo $a + $b | bc`
;;
2)
result=`echo $a - $b | bc`
;;
3)
result=`echo $a \* $b | bc`
;;
4)
result=`echo "scale=2; $a / $b" | bc`
;;
esac
echo "Result: $result"
به استفاده از case … esac که معادل Bash دستور switch از زبان های دیگر است توجه کنید. این به شما امکان می دهد یک مقدار – در این مورد، متغیر انتخاب – را در برابر چندین مقدار ثابت آزمایش کنید و کد مرتبط را اجرا کنید.
این اسکریپت از دستور bc برای انجام هر محاسبات استفاده می کند.