وجدت بالصدفة موقع learnxinyminutes والذي يساعدك على تعلم أساسيات ومفاهيم أي لغة برمجية بشكل بسيط وسهل جدًا يسهل عليك فهم اللغة. فقمت بأخذ جزء مما كتبوه عن لغة bash وترجمته، كون أن الموقع لايوفر ترجمة عربية حاليًا لها. وهي متاحة لمن أراد إكمال ترجمتها لكي توضع في موقعهم.
السطر الأول من البرنامج هو رمز Shebang والذي يخبر النظام كيف يقوم بتشغيل المحتوى. مثال بسيط لطباعة hello world:
#!/bin/bash
echo Hello world!
كل أمر يبدأ في سطر جديد، أو بعد فاصلة منقوطة:
echo 'This is the first line'; echo 'This is the second line'
تعريف المتغيرات يتم بالشكل التالي:
Variable="Some string"
وليس بهذا الشكل لأن باش ستعتبر أن Variable هو أمر يجب تنفيذه، لذا ستظهر رسالة خطأ:
Variable = "Some string"
أو هذا الشكل لأن باش ستعتبر أن ‘Some string’ هو أمر يجب تنفيذه، لذا ستظهر رسالة خطأ. (في هذه الحالة سيتم اعتبار ‘Variable=’ كجزء من تعريف المتغير يأخذ قيمة الأمر ‘Some string’):
Variable= 'Some string'
استخدام المتغيرات:
عند استخدام المتغير — استناد قيمه له، استخراجه، إلخ — فتقوم بكتابة اسمه بدون علامة الدولار $. إذا أردت أن تستخدم قيمة المتغير نفسها، عندئذٍ تستخدم علامة الدولار $.
echo $Variable
echo "$Variable"
echo '$Variable'
استبدال جزء من المتغير:
هذا سيقوم باستبدال أول نتيجة لـ “Some” بـ “A”
echo ${Variable/Some/A}
التعامل مع جزء من المتغير:
Length=7
هذا سيقوم بإرجاع أول 7 أحرف من القيمة
echo ${Variable:0:Length}
أخذ مدخلات من المستخدم:
echo "What's your name?"
لاحظ أننا لم نحتاج إلى تعريف متغير جديد
read Name
echo Hello, $Name!
قاعدة if الشرطية:
استخدم أمر ‘man test’ للمزيد من المعلومات حول الشروط
if [ $Name -ne $USER ]
then
echo "Your name isn't your username"
else
echo "Your name is your username"
fi
التنفيذ المشروط:
سيتم تنفيذ الأمر الثاني فقط عند نجاح الأمر الأولecho "Always executed" && echo "Only executed if first command does NOT fail"
سيتم تنفيذ الأمر الثاني فقط عند فشل الأمر الأولecho "Always executed" || echo "Only executed if first command fails"
لاستخدام && و || مع if الشرطية, فستحتاج إلى استخدام زوج من الأقواس المربعة:
if [ $Name == "Steve" ] && [ $Age -eq 15 ]
then
echo "This will run if $Name is Steve AND $Age is 15."
fi
if [ $Name == "Daniya" ] || [ $Name == "Zach" ]
then
echo "This will run if $Name is Daniya OR Zach."
fi
بعكس لغات البرمجة الأخرى، فإن باش تعتبر واجهة تنفيذ أوامر Shell. لذا فهي تعمل في إطار المجلد الحالي في النظام. يمكنك مثلًا أن تستخدم الأمر ls لعرض محتوى المجلد:
ls
هذه الأوامر تمتلك خصائص للتحكم بطريقة التنفيذ:
ls -l يقوم بعرض المجلدات والملفات على شكل قائمة
أمر grep يقوم بتصفية المحتوى حسب الصيغة النمط المختار. هذا مثال على عرض الملفات المنتهية بصيغة .txt فقط في المجلد الحالي:
ls -l | grep "\.txt"
حذف الملفات مع عرض التفاصيل:
rm -v output.out error.err output-and-error.log
بالإمكان أن تستخدم الأوامر داخل أوامر أخرى باستخدام $( ):
الأمر التالي يعرض عدد الملفات والمجلدات الموجودة في المجلد الحالي:
echo "There are $(ls | wc -l) items here."
الطريقة الأخرى لتنفيذ أمر داخل أمر آخر هو باستخدام علامات “ ولكن حينها لاتستطيع وضع أكثر من أمرين. الطريقة المفضلة هي باستخدام$( ):
echo "There are `ls | wc -l` items here."
باش تستخدم المطابقة الشرطية بشكل مشابه لـ switch في لغتي Java و ++C:
case "$Variable" in
عرض الأنماط للشروط التي تريد مطابقتها
0) echo "There is a zero.";;
1) echo "There is a one.";;
*) echo "It is not null.";;
عرض محتوى المتغير 3 مرات:
for Variable in {1..3}do
echo "$Variable"done
كتابة for loop بالطريقة التقليدية:
for ((a=1; a <= 3; a++))do
echo $adone
بالامكان استخدامها أيضًا للتعامل مع الملفات. هنا طريقة عرض أكثر من ملف
for Variable in file1 file2
do
cat "$Variable"done
أو عرض مخرجات أمر معين:
for Output in $(ls)do
cat "$Output"done
while loop:
while [ true ]do
echo "loop body here..."
break
done
تستطيع أيضًا تعريف الدوال:
function foo (){
echo "Arguments work just like script arguments: $@"
echo "And: $1 $2..."
echo "This is a function"
return 0
}
طريقة أخرى لتعريف الدوال
bar (){
echo "Another way to declare functions!"
return 0
}
استخدام الدوال:
foo "My name is" $Name
هناك العديد من الأوامر المفيد تعلمها:
عرض آخر 10 أسطر من ملف
tail -n 10 file.txt
عرض أول 10 أسطر من ملف
head -n 10 file.txt
ترتيب أسطر ملف
sort file.txt
عرض أو ازالة الأسطر المكررة
uniq -d file.txt
عرض العمود الأول قبل الفاصلة ‘,’:
cut -d ',' -f 1 file.txt
استبدال كل كلمة ‘okay’ بكلمة ‘great’ في ملف:
sed -i 's/okay/great/g' file.txt