فهرس الدليل
لغة باش (Bourne Again SHell) هو لغة تحكم في نظام التشغيل Unix ومشتق من اللغة الشل (Shell). يوفر باش واجهة سطر الأوامر القوية (CLI) للتفاعل مع النظام وتوجيه المهام. إليك ملخصٌ للمفاهيم الأساسية في برمجة باش.
لغة Bash: أساسيات الأساسيات
فيما يلي الأساسيات المهمة التي يجب أن تعرفها في بداية تعلمك للغة باش.
الأوامر الأساسية
الأوامر هي التعليمات التي يتم إرسالها إلى Shell لأداء مهام محددة. فيما يلي أمثلة عليها:
# سرد الملفات في المسار الحالي
ls
# إنشاء مجلد جديد
mkdir newFolder
# إنشاء ملف جديد
touch newFile
# حذف ملف
rm file
Bashاسم الأمر | توضيح |
---|---|
ls | يُستخدم لعرض قائمة بالملفات والمجلدات في الدليل الحالي. |
mkdir | يُستخدم لإنشاء مجلد جديد. |
rm | يُستخدم لحذف ملف أو مجلد. |
cp | يُستخدم لنسخ ملف أو مجلد من موقع إلى آخر. |
mv | يُستخدم لنقل ملف أو مجلد من موقع إلى آخر، أو لإعادة تسمية ملف أو مجلد |
touch | يُستخدم لإنشاء ملف فارغ جديد أو لتحديث وقت تعديل ملف موجود. |
cd | يُستخدم للتنقل بين المجلدات، أو للانتقال إلى مجلد معين. |
grep | يُستخدم للبحث عن نص محدد داخل ملفات معينة أو نتائج الأوامر الأخرى. |
cat | يُستخدم لعرض محتوى الملفات على الشاشة، أو لدمج ملفات مع بعضها البعض. |
chmod | يُستخدم لتغيير أوامر التحكم في الوصول إلى الملفات والمجلدات (صلاحيات الملف). |
سكربتات Bash
النصوص البرمجية في باش هي ملفات تحتوي على سلسلة من الأوامر والتعليمات. يتم تنفيذ هذه النصوص من قبل مترجم باش. عادةً ما تكون النصوص البرمجية لها امتداد .sh
، على الرغم من أن هذا ليس ضروريًا تمامًا.
لاحظ أن يمكنك استخدام نفس أوامر لينكس المذكورة في الجدول السابق في سكربتات لغة Bash
إنشاء أول سكربت باش
- اختر محرر النصوص المناسب لك: ابدأ بفتح محرر نصوص في نظام لينكس. يمكنك استخدام أي محرر نصوص تفضله، مثل Nano أو Vim أو Emacs.
- كتابة السكربت: أول خطوة في كتابة السكربت هي إنشاء ملف جديد وإعطائه امتداد “.sh” ليدل على أنه سكربت باش. مثلاً، يمكنك تسمية ملفك “first-script.sh”.
- كتابة الأوامر داخل السكربت.
- جعل السكربت قابل للتنفيذ: باستخدام أمر chmod
- تشغيل السكربت
# Step 1, 2
# Terminal
nano first-script.sh
Bash#!/bin/bash
# Step 3
# هذا سكربت باش بسيط
echo "مرحباً، هذا أول سكربت باش لي!"
Bash# Step 4
# Terminal
chmod +x first-script.sh
Bash# Step 5
# Terminal
./first-script.sh
مرحباً، هذا أول سكربت باش لي!
Bash#!/bin/bash
السطر “#!/bin/bash” أو ما يُعرف بـ shebang هو عبارة توجد في أعلى ملفات السكربتات في نظام لينكس وبعض أنظمة التشغيل الأخرى. وتستخدم لتحديد مكان البرنامج المستخدم لتشغيل السكربت.
- الرمز “#!” يشير إلى أن السطر الذي يليه هو خاص بتعليمات التشغيل.
- “/bin/bash” يشير إلى موقع برنامج باش في النظام. في هذه الحالة، يُفترض أن السكربت سيتم تنفيذه باستخدام باش (Bash) كمترجم.
هذا السطر مهم لأنه يحدد البرنامج الذي يجب استخدامه لتنفيذ السكربت. فإذا كنت ترغب في تشغيل سكربت بلغة محددة مثل الباش، فيجب أن يكون هذا السطر موجودًا في البداية.
إذا كان السكربت يتوقع أن يتم تنفيذه باستخدام باش، فإن وجود هذا السطر مهم جدًا. فإذا كان السطر مفقودًا، فقد يتم تنفيذ السكربت باستخدام الشيل الافتراضي للمستخدم، والذي قد لا يكون باش، مما قد يؤدي إلى مشاكل في التنفيذ.
بشكل عام، إذا كنت تريد كتابة سكربت باش، يُفضل أن تشمل السطر “#!/bin/bash” في البداية كجزء من الطريقة الجيدة في كتابة السكربتات.
echo
في لغة الباش (Bash)، الأمر echo
هو أحد الأوامر الأساسية التي تُستخدم لطباعة strings أو حتى المتغيرات على الشاشة.
#!/bin/bash
echo "hello"
Bash# Terminal
./first-script.sh
hello
Bashالمتغيرات Variables
تُستخدم المتغيرات لتخزين البيانات التي يمكن الرجوع إليها في جميع أنحاء النص البرمجي. أسماء المتغيرات حساسة لحالة الأحرف Case Sensitive وعادةً ما تتكون من حروف كبيرة، حروف صغيرة، أرقام، وشرطات سفلية (_
). يتم تعيين قيمة إلى متغير باستخدام الصيغة اسم_المتغير=القيمة
. مثال:
# إنشاء المتغير
greeting="مرحبًا، العالم!"
# عرض قيمة المتغير
echo $greeting
Bashاشارة الاقتباس الفردية ‘
- يتم استخدامها لعرض النص المتضمن فيها كما هو حرفياً.
- لا يتم عرض قيم المتغييرات فيها.
#!/bin/bash
name=Nawras
echo 'My name is $name'
Bash# Terminal
./first-script.sh
My name is $name
Bashاشارة الاقتباس المزدوجة “
- يتم استخدامها لعرض النص المتضمن فيها.
- يتم عرض قيم المتغييرات فيها.
#!/bin/bash
name=Nawras
echo "My name is $name"
Bash# Terminal
./first-script.sh
My name is Nawras
Bashالتعليقات
تبدأ التعليقات في النصوص البرمجية للباش برمز #
وتستمر حتى نهاية السطر. تُستخدم لتوثيق النصوص البرمجية، وتوفير شروحات أو تذكيرات لمستخدمي النص البرمجي أو المطورين. مثال:
# هذا تعليق لا يتم تنفيذه
Bashنتيجة التنفيذ Exit Status
حالة التنفيذ (Exit Status) في لغة الباش (Bash) هي قيمة تُشير إلى نتيجة تنفيذ أمر معين أو سكربت. عادةً ما يكون 0 يُعتبر رمزًا للنجاح، في حين أن أي قيمة غير صفر تُعتبر رمزًا للفشل.
بمجرد انتهاء تنفيذ الأمر أو السكربت، يتم تخزين حالة التنفيذ في متغير يُسمى “حالة الخروج” (exit status)، والذي يمكن الوصول إليه باستخدام المتغير “$?”.
# Terminal
./first-script.sh
0
Bashفي البرمجة، يُمكن استخدام حالة التنفيذ لاتخاذ القرارات بناءً على نتيجة تنفيذ الأمر، مثل تنفيذ أوامر إضافية في حالة النجاح أو عرض رسالة خطأ في حالة الفشل.
Exit 0
تمثل قيمة 0 تنفيذ السكربت أو الأمر بشكل ناجح.
#!/bin/bash
mkdir myfolder
echo $?
Bashفي المثال السابق: تم إنشاء سكربت لإنشاء مجلد جديد باسم myfolder، ثم تم طباعة على الشاشة إذا تم الأمر بنجاح باستخدام معامل $?.
عند تنفيذ السكربت، كانت حالة الخروج أو exit تساوي 0 لأن تم تم فعليا إنشاء المجلد بنجاح.
Exit failure
أي رقم عدا 0 في قيمة حالة exit يعتبر فشلاً في تنفيذ السكربت أو الأمر.
#!/bin/bash
rm -r lolo
echo $?
Bash# Terminal
./first-script.sh
rm: cannot remove 'lolo': No such file or directory
1
Bashفي المثال السابق: تم إنشاء سكربت لحذف مجلد لولو، ثم تم طباعة على الشاشة إذا تم الأمر بنجاح باستخدام معامل $?.
لا يوجد مجلد بهذا الاسم، ولذلك تم عرض نتيجة تنفيذ السكربت 1 أي يعني لا تساوي صفر. يعني حالة فشل في التنفيذ.
تنفيذ كل أمر أو سكربت في لغة الباش يترتب عليه رقم خروج (Exit Code) مختلف يُمثل حالة تنفيذه. هذا الرقم يساعد في فهم نتيجة التنفيذ وتحديد ما إذا كان الأمر قد نجح أم فشل. تذكر أن القيمة الافتراضية للنجاح هي 0، أما قيم الفشل فتكون غير صفرية.
راجع قسم المعاملات الخاصة في هذا الدليل لتعلم المزيد
الجمل الشرطية Conditional Statement
في لغة الباش (Bash)، تُستخدم العبارات الشرطية (Conditional Statements) لاتخاذ القرارات بناءً على قيم معينة أو حالات مختلفة. يتم تنفيذ كود معين إذا تم تحقيق الشرط المحدد، ويتم تجاهله إذا لم يتم ذلك. إليك بعض العبارات الشرطية الأساسية في لغة الباش:
if statement
تستخدم لتنفيذ كود معين إذا تم تحقيق الشرط المحدد.
if [ condition ]; then
# code to execute if condition is true
fi
Bash#!/bin/bash
name="Ali"
if [ "$name" = "Ali" ]; then
echo "Hello Admin"
fi
Bash# terminal
./first-script.sh
Hello Admin
Bashانتبه: لا تنس أن تضع فراغ بين [] عند كتابة الشرط.
if-else statement
تستخدم لتنفيذ كود معين إذا تم تحقيق الشرط، وكود مختلف إذا لم يتم ذلك.
if [ condition ]; then
# code to execute if condition is true
else
# code to execute if condition is false
fi
Bash#!/bin/bash
name="Lala"
if [ "$name" = "Ali" ]; then
echo "Hello Admin"
else
echo "You are not the admin"
fi
Bash# terminal
./first-script.sh
You are not the admin
Bashelif statement
تستخدم لتحديد عدة شروط متعددة وتنفيذ كود مختلف لكل شرط.
if [ condition1 ]; then
# code to execute if condition1 is true
elif [ condition2 ]; then
# code to execute if condition2 is true
else
# code to execute if all conditions are false
fi
Bash#!/bin/bash
number=15
if [ $number -gt 20 ]; then
echo "$number is greater than 20"
elif [ $number -eq 15 ]; then
echo "$number is equal to 15"
else
echo "$number is less than 20 and not equal to 15"
fi
Bash# terminal
./first-script.sh
15 is equal to 15
Bashمعاملات المقارنة Comparison Operators
في لغة الباش (Bash)، تستخدم معاملات المقارنة للقيام بالمقارنات بين القيم وإرجاع قيمة صحيحة أو خاطئة بناءً على نتيجة المقارنة. إليك بعض معاملات المقارنة الأساسية في باش:
معامل المقارنة | الوصف | مثال |
---|---|---|
= | يساوي: تستخدم لــ strings | [ "$var1" = "$var2" ] |
!= | لا يساوي: تستخدم لــ strings | [ "$var1" != "$var2" ] |
-eq | يساوي: تستخدم لــ الأرقام | [ "$num1" -eq "$num2" ] |
–ne | لا يساوي: تستخدم لــ الأرقام | [ "$num1" -ne "$num2" ] |
-lt | أقل من | Less Than | [ "$num1" -lt "$num2" ] |
-le | أقل من أو يساوي | Less Than or Equal to | [ "$num1" -le "$num2" ] |
-gt | أكبر من | Greater Than | [ "$num1" -gt "$num2" ] |
-ge | أكبر من أو يساوي | Greater than or or Equal to | [ "$num1" -ge "$num2" ] |
المعاملات المنطقية Logical Operator
يمكن استخدام المعاملات المنطقية في لغة Bash لتحقيق شروط معقدة أو تجميع عدة شروط معًا. هنا بعض المعاملات المنطقية الشائعة:
المعامل المنطقي | الوصف | مثال |
---|---|---|
&& | AND – و |
|
|| | OR – أو |
|
! | NOT – ليس | ! [ "$var" = "value" ] |
مثال على استخدام المعاملات المنطقية معاملات المقارنة معاً.
#!/bin/bash
num=1
num=20
# Logical AND
if [ "$num1" -gt 0 ] && [ "$num2" -gt 0 ]; then
echo "Both numbers are greater than 0"
fi
# Logical OR
if [ "$num1" -eq 0 ] || [ "$num2" -eq 0 ]; then
echo "At least one of the numbers is equal to 0"
fi
# Logical NOT
if ! [ "$num1" -eq "$num2" ]; then
echo "The numbers are not equal"
fi
Bashالتكرار Loops
تُستخدم Loops لتنفيذ مجموعة من الأوامر مرارًا وتكرارًا. يدعم باش الحلقات for
، while
، و until
. مثال:
for i in {1..5}; do
echo "الرقم: $i"
done
Bashهذا القسم قيد الكتابة. سيتم اضافة هذا القسم لاحقاً.
القوائم Arrays
تستخدم القوائم لتخزين عدة قيم. المثال التالي يوضحها:
#!/bin/bash
# لإنشاء Array
myArray=(1 2 3 4 5 6 7 8 9)
# لعرض Array
echo "The Array is: ${myArray[@]}"
# لمعرفة عدد عناصر Arrau
echo "The Array Length is: ${#myArray[@]}"
# لعرض العنصر الأول من القائمة
echo "The First value is: ${myArray[0]}"
# لعرض العنصر التاسع
echo "The 9th value is: ${myArray[8]}"
Bashالدوال Functions
تسمح الدوال في باش بتجميع الأوامر معًا وإعادة استخدامها في جميع أنحاء النص البرمجي. يتم تعريف الوظائف باستخدام الكلمة المفتاحية function
أو ببساطة تقديم اسم الدالة تلاه قوسان. مثال:
# تعريف الدالة
my_function() {
echo "مرحبًا من داخل الدالة!"
}
# استدعاء الدالة
my_function
Bash# Terminal
./first-script.sh
مرحبًا من داخل الدالة!
Bashالمعاملات Parameters
المعاملات أو Parameters هي المتغيرات التي يتم استخدامها داخل الدوال أو Functions.
# تعريف الدالة
my_function() {
echo $1 # paramater 1
echo $2 # parameter 2
}
# استدعاء الدالة
my_function
Bashالمعاملات المُمررة Arguments
هي القيم التي تقوم بتمريرها للدالة Function عند تنفيذها
hello # argument 1
User # argument 2
# Terminal
./first-script.sh hello User
hello
User
Bashما هي Paramaters أو المعاملات؟ ما هي Arguments أو المعاملات الممررة؟ وما الفرق بينها؟ راجع مقتطف الفرق بين Parameters و Arguments لتعلم المزيد.
المعاملات في لغة Bash
المعاملات الموضعية | Positional Parameters
المعاملات الموضعية هي متغيرات خاصة في برمجة الشل (Bash) تستخدم للوصول إلى القيم التي يتم تمريرها إلى نص برنامج أو دالة. يمكن استخدام هذه المتغيرات للتعامل مع المدخلات المختلفة التي يتم تمريرها إلى البرنامج أو الدالة.
./first-script.sh hello you
./first-script.sh
hello
you
Bash# File Name : first-script.sh
echo $0
echo $1
echo $2
Bashاسم المعامل | توضيح |
---|---|
$0 | تحمل قيمة اسم ملف سكربت الذي يحتوي على الكود |
$1 | تحمل قيمة أول arg يتم تزويده عند تنفيذ ملف السكربت |
$2 | تحمل قيمة ثاني arg يتم تزويده عند تنفيذ ملف السكربت |
$3 | تحمل قيمة ثالث arg يتم تزويده عند تنفيذ ملف السكربت |
$4 | تحمل قيمة رابع arg يتم تزويده عند تنفيذ ملف السكربت |
$5 | تحمل قيمة خامس arg يتم تزويده عند تنفيذ ملف السكربت |
$6 | تحمل قيمة سادس arg يتم تزويده عند تنفيذ ملف السكربت |
$7 | تحمل قيمة سابع arg يتم تزويده عند تنفيذ ملف السكربت |
$8 | تحمل قيمة ثامن arg يتم تزويده عند تنفيذ ملف السكربت |
$9 | تحمل قيمة تاسع arg يتم تزويده عند تنفيذ ملف السكربت |
المعاملات الخاصة | Special Parameters
المعاملات الخاصة في لغة Bash تُستخدم للتفاعل مع البيانات والمتغيرات التي يتم تمريرها إلى السكربتات أو الدوال عند تنفيذها. تُسهّل هذه المعاملات التحكم في السلوك وتنفيذ العمليات بناءً على البيانات المُمررة. الجدول الآتي يوضح بعضها:
اسم المعامل | توضيح |
---|---|
$@ | يقوم بوضع كل المعاملات المُمررة ككقائمة أو array |
$# | عدد المعاملات المُمررة |
$* | يقوم بوضع كل المعاملات المُمررة ككقائمة أو array |
$? | يمثل حالة exit لآخر أمر تم تنفيذه |
$_ | يمثل المعامل الممرر الأخير الذي تم استخدامه في الأمر السابق |
المعامل الخاص $#
./first-script.sh hello you 5
./first-script.sh
Number of passed Args: 3
Bash# File Name : first-script.sh
echo "Number of passed Args: $#"
Bashالمعاملات الخاصة $@ و $*
./first-script.sh hello you 5
./first-script.sh
All args are: hello you 5
All args are: hello you 5
Bash# File Name : first-script.sh
echo "All args are: $*"
echo "All args are: $@"
Bashالفرق بين معامل $@ و $* في لغة باش
هذا القسم قيد الكتابة. سيتم اضافة هذا القسم لاحقاً.
المعامل الخاص $?
# File Name : first-script.sh
mkdir folder
echo "The exit status is $?"
Bash./first-script.sh
The exit status is 0
Bashفي المثال السابق: تم إنشاء سكربت لإنشاء مجلد جديد باسم folder، ثم تم طباعة على الشاشة إذا تم الأمر بنجاح باستخدام معامل $?.
عند تنفيذ السكربت، كانت حالة الخروج أو exit تساوي 0 لأن تم تم فعليا إنشاء المجلد بنجاح.
المعامل الخاص $_
عند تنفيذ سطر في الموجه، قد يكون لديك مخرجات أو نتائج تم إنشاؤها. في حالة استخدام $_
، يُرجع النص الذي تم استخدامه كآخر معامل مُمرر في الأمر الذي تم تنفيذه. هذا يمكن أن يكون مفيدًا عندما تحتاج إلى استخدام المعامل الممرر الأخير في أمر جديد.
echo "Hello, World"
Hello, World
echo "$_"
Hello, World
Bashls
file1.txt file2.txt file3.txt
mv file3.txt new_file.txt
echo "تم نقل الملف إلى $_"
تم نقل الملف إلى new_file.txt
Bashعزيزي المتابع: كتابة سكربتات باش قد يكون فيه بعض من التعقيد. سأقوم بتحديث هذا الدليل بشكل دوري حتى اضيف أمثلة أكثر وتوضيحات أكثر حول جوانب هذه اللغة. تابع مسار سكربتات باش المجاني والمتاح للجميع لتعلم كتابة الأكواد في لغة Bash بطريقة أقرب للواقع أكثر.