برنامه نویسی Bash یکی از محبوب ترین و در دسترس ترین راه های برنامه نویسی کامپیوتر لینوکس شما است. این مثال های ساده اسکریپت به شما کمک میکند تا فرآیند را درک کرده و شما را با اصول برنامه نویسی Bash آشنا میکند.
1. نحوه چاپ Hello World در Bash
مثال Hello World یک راه عالی برای یادگیری هر زبان برنامه نویسی است و Bash نیز از این قاعده مستثنی نیست.
در اینجا نحوه چاپ “Hello World” با استفاده از Bash آمده است:
1. یک ویرایشگر متن باز کنید و شروع به ویرایش یک فایل جدید حاوی خطوط کد زیر کنید.
۲. خط اول اسکریپت های Bash شما همیشه باید به این صورت باشد:
#!/bin/bash
دستور Shebang (#!/bin/bash) ضروری است زیرا پوسته از آن برای تصمیم گیری در مورد نحوه اجرای اسکریپت استفاده میکند. در این حالت از مفسر Bash استفاده میکند.
۳. هر خطی که با علامت # شروع شود یک کامنت است. خط shebang یک مورد خاص است، اما شما میتوانید از نظرات خود برای توضیح کد خود استفاده کنید. یک کامنت در خط 2 اضافه کنید، به عنوان مثال:
# Print some text from a bash script
۴. میتوانید با استفاده از دستور echo و سپس مقداری که میخواهید، در خروجی استاندارد چاپ کنید. موارد زیر را در خط 3 اضافه کنید:
echo “Hello World”
۵. اسکریپت را ترجیحا با پسوند .sh ذخیره کنید، به عنوان مثال. hello_world.sh. تمدید لازم نیست، اما قراردادی است که رعایت آن مفید است.
۶. برای اجرای اسکریپت خود، فایل را قابل اجرا کنید. از دستور chmod (“تغییر حالت”) به همراه آرگومان +x (“اجرا”) و نام اسکریپت پوسته خود استفاده کنید:
chmod +x hello_world.sh
۷. از این دستور برای اجرای اسکریپت از داخل دایرکتوری آن استفاده کنید:
./hello_world.sh
۸. هنگامی که اسکریپت اجرا شود، متن “Hello World” را در ترمینال شما چاپ میکند:

2. با خواندن ورودی یک دایرکتوری ایجاد کنید
از اسکریپت های خود، میتوانید هر برنامه ای را که معمولاً در خط فرمان اجرا میکنید، اجرا کنید. به عنوان مثال، میتوانید با استفاده از دستور mkdir یک دایرکتوری جدید از اسکریپت خود ایجاد کنید.
1. با همان خط shebang مانند قبل شروع کنید:
#!/bin/bash
2. با استفاده از دستور echo مانند قبل، نام دایرکتوری را از کاربر درخواست کنید:
echo “Enter new directory name:”
3. از دستور خواندن داخلی برای واکشی ورودی کاربر استفاده کنید. آرگومان واحد متغیری را نامگذاری میکند که پوسته ورودی را در آن ذخیره میکند:
read newdir
۴. هنگامی که نیاز به استفاده از مقدار ذخیره شده در یک متغیر دارید، پیشوند نام آن را با نماد دلار ($) قرار دهید. میتوانید محتویات متغیر ورودی را به عنوان آرگومان به دستور mkdir ارسال کنید تا یک دایرکتوری جدید ایجاد کنید:
mkdir $newdir
۵. هنگامی که این اسکریپت را اجرا میکنید، از شما برای ورودی میخواهد. یک نام دایرکتوری معتبر وارد کنید و خواهید دید که اسکریپت آن را در دایرکتوری فعلی شما ایجاد میکند:

3. یک دایرکتوری با استفاده از آرگومان های خط فرمان ایجاد کنید
به عنوان جایگزینی برای خواندن ورودی به صورت تعاملی، اکثر دستورات لینوکس از آرگومان ها پشتیبانی میکنند. هنگام اجرای یک برنامه میتوانید یک آرگومان برای کنترل رفتار آن ارائه کنید.
در اسکریپت خود، میتوانید از $1 برای ارجاع به متغیر خاصی که حاوی مقدار آرگومان اول است استفاده کنید. $2 به آرگومان دوم اشاره خواهد کرد و به همین ترتیب.
۱. با استفاده از دستور mkdir از مثال قبلی یک دایرکتوری ایجاد کنید. با این حال، این بار از متغیر داخلی $1 استفاده کنید:
#!/bin/bash
mkdir $1
۲. اسکریپت را اجرا کنید، این بار نام انتخابی یک فهرست جدید را به عنوان آرگومان ارسال کنید:
./arg_dir.sh Test
ممکن است تعجب کنید که اگر اسکریپت را بدون ارائه هیچ استدلالی اجرا کنید چه اتفاقی میافتد. آن را امتحان کنید و ببینید؛ شما باید خطایی دریافت کنید که “usage: mkdir” را شروع میکند:

بدون هیچ آرگومان خط فرمان، مقدار $1 خالی خواهد بود. وقتی اسکریپت شما mkdir را فراخوانی کند، آرگومان را به آن ارسال نکرده و دستور mkdir آن خطا را برمیگرداند. برای جلوگیری از این امر، میتوانید خودتان وضعیت را بررسی کنید و خطای دوستانه تری ارائه دهید:
1. مثل همیشه، با خط shebang شروع کنید:
#!/bin/bash
2. قبل از اینکه mkdir را فراخوانی کنید، آرگومان اول خالی را بررسی کنید (یعنی بدون آرگومان). میتوانید این کار را با استفاده از دستور if Bash انجام دهید که کد را بر اساس یک شرط اجرا میکند:
if [“$1” = “”]; then
3. اگر آرگومان اول خالی است، یک خطا را چاپ کنید و از اسکریپت خود خارج شوید:
echo “Please provide a new directory name as the first argument”
exit
4. کلمه کلیدی کمی عجیب «fi» («اگر» معکوس شده) پایان یک دستور if را در Bash نشان میدهد:
fi
5. اسکریپت شما اکنون میتواند مانند قبل ادامه یابد، تا زمانی که یک آرگومان وجود دارد رسیدگی کند:
mkdir $1
هنگامی که این نسخه جدید اسکریپت را اجرا میکنید، اگر فراموش کردید یک آرگومان اضافه کنید، پیامی دریافت خواهید کرد:

4. یک فایل را با استفاده از یک تابع Bash حذف کنید
اگر همان کد را تکرار میکنید، میتوان آن را در یک تابع پیچید. سپس میتوانید هر زمان که بخواهید با آن عملکرد تماس بگیرید.
در اینجا نمونه ای از تابعی است که یک فایل داده شده را حذف میکند.
1. با خط shebang شروع کنید:
#!/bin/bash
2. یک تابع را با نوشتن نام آن و به دنبال پرانتزهای خالی و دستورات داخل پرانتزهای مجعد تعریف کنید:
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 برای انجام هر محاسبات استفاده میکند.