ملخص كتابة سكربت باش - Bash Shell Script Cheatsheet
سكربت صدفة باش (Bash) تجدها في أنظمة يونكس ، و لينكس ، و ماك. وتستطيع أيضاً تثبيت باش في لينكس داخل نظام ويندوز أيضاً.
أول سطر في أي سكربت مكتوب بلغة باش يبدأ بهذا السطر #! /bin/bash
لأن برنامج تشغيل باش موجود في المسار /bin/bash
. للتأكد من مسار باش ، استخدم هذا الأمر which bash
.
طباعة المعلومات على الشاشة 🔗
تستطيع استخدام echo Hello, World!
أو echo "Hello, world!"
.
المتغيرات وطباعتهم على الشاشة 🔗
NAME = "Abanoub"
echo "My name is $NAME"
أو استخدم هذه الطريقة
NAME = "Abanoub"
echo "My name is ${NAME}"
طلب المعلومات من المستخدم 🔗
read -p "Enter your name: " NAME
echo "Hello, $NAME!"
If Statement | الشرط 🔗
أبسط شكل للشرط في سكربت باش:
if ["$NAME" == "Abanoub"]
then
echo "Yourname is Abanoub!"
fi
لاحظ أن نهاية if هي fi وهي عكس حروف if.
تحديد ماذا يحدث إن لم يتحقق الشرط عن طريق if else في سكربت باش:
if ["$NAME" == "Abanoub"]
then
echo "Yourname is Abanoub!"
else
echo "Yourname is NOT Abanoub"
fi
استخدام شرط ثم شرط آخر عن طريق else if (elif) في سكربت باش:
if ["$NAME" == "Abanoub"]
then
echo "Yourname is Abanoub!"
elif ["$NAME" == "Jack"]
then
echo "Yourname is Jack!"
else
echo "Yourname is NOT Abanoub NOR Jack!"
fi
المقارنات المنطقية 🔗
يُمكنك استخدام هذه هذه المعاملات المنطقية للمقارنة:
المعامل المنطقي - Logic Operator | Meaning - المعني |
---|---|
-eq | equal to (يساوي) (the same meaning of == in other programming languages) |
-ne | not equal (لا يساوي) (the same meaning of != in other programming languages) |
-gt | greater then (أكبر من) (the same meaning of > in other programming languages) |
-ge | greater than or equal to (أكبر من أو يساوي) (the same meaning of >= in other programming languages) |
-lt | less than (أقل من) (the same meaning of < in other programming languages) |
-le | less than or equal to (أقل من أو يساوي) (the same meaning of <= in other programming language) |
واستخدمهم بهذا الشكل:
NUM1 = 3
NUM2 = 5
if ["$NUM!" -gt "$NUM2"]
then
echo "$NUM1 is greater then $NUM2"
fi
شروط التحقق من حالات الملفات أو نوعيتها 🔗
هناك أعلام للمقارنة خاصة بتحديد حالة الملف أو نوعيته (file condition flags):
الرمز - symbol | المعني - meaning |
---|---|
-d | is directory? (هل مجلد؟) |
-e | exists? (موجود؟) (usually we use -f instead) |
-f | a file? (ملف ؟) |
-g | is group id set? |
-r | readable? (قابل للقراءة؟) |
-s | non-zero size? (مساحة الملف غير صفرية؟) |
-u | user id is set? |
-w | writable? (قابل للكتابة والتعديل ؟) |
-x | executable? (قابل للتشغيل؟) |
واستخدامهم بهذا الشكل:
FILE = "test.txt"
if [ -f "$FILE" ]
then
echo "$FILE is a file"
else
echo "$FILE is NOT a file"
fi
Case Statement - التعامل مع الحالات المختلفة 🔗
Case تُسمَّى switch case في اللغات الأخرى, وبعض اللغات الأخرى الحديثة تُسميها when case مثل لغة كوتلن.
إليك طريقة التعامل مع الحالات المختلفة لمتغير واحد في لغة باش:
read -p "Are you 25? Y/N" ANSWER
case "$ANSWER" in
[yY]|[yY][eE][sS])
echo "Your age is mine :)"
;;
[nN]|[nN][oO])
echo "Nooo, your age is different than mine :("
;;
*)
echo "Please enter y/yes or n/no"
;;
esac
لاحظ أن:
[nN]
هي طريقة لإعطاء إحتمالين للحرف الواحد؛ إما الحرف الصغير n أو الحرف الكبير N.
[yY][eE][sS]
هي كلمة yes أو YES أو أي مزيج من الحروف الكبيرة والصغيرة مثل كلمة YeS.
*)
هذه هي الحالة الإفتراضية أو الحالة الأخيرة الغير محددة للمتغير (default).
esac
هي كلمة الإغلاق كود الـ case حيث أنها عكس حروفها.
For Loop | التكرار 🔗
NAMES = "Abanoub Jack John Smith"
for NAME in $NAMES
do
echo "Hello, $NAME"
done
إليك سكربت لإعادة تسمية كل الملفات النصية *.txt
مرةً واحدة بلغة باش:
FILES = $(ls *.txt)
NEW = "new"
for FILE in $FILES
do
echo "Renaming $FILE to new-$FILE"
mv $FILE $NEW-$FILE
done
While Loop | التكرار 🔗
إليك طريقة كتابة كود تكرار بإستخدام while لقراءة ملف nfile.txt سطر بسطر.
LINE = 1
while read -r CURRENT_LINE
do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done < "./nfile.txt"
Bash Script Function Syntax | طريقة كتابة دالة - فانكشن 🔗
function sayHello(){
echo "Hello, World!"
}
sayHello
كتبنا دالة لطباعة عبارة Hello, World!
واستدعيناها ليتم تنفيذ الكود.
Bash Script Functions with Parameters | دالة بمتغيرات 🔗
هذه هي طريقة كتابة دالة بمتغيرات (params) في NAMES = "Abanoub Jack John Smith"
لغة باش :
function greet(){
echo "Hello, I am $1 and I am $2"
}
greet "Abanoub" "30"
الرمز $1
هو أول متغير داخل للدالة (parameter), و $2
هو ثاني متغير داخل للدالة. لذلك عند استدعاء الدالة أو الفانكشن لابد من كتابة هذه المتغيرات بالترتيب بهذا الشكل greet "Abanoub" "30"
. وهذا يعني أن "Abanoub"
هو المتغير الأول (param) $1
و "30"
هو المتغير الثاني (param) $2
.
نصيحة أخيرة 🔗
أنت الآن قد تعلمت طريقة كتابة لغة باش، عليك أنت تتعلم الآن أوامر باش. سأحاول شرحها فيما بعد.