لزيادة الكفاءة أثناء العمل على أنظمة لينكس، من الضروري إتقان كتابة السكريبتات البرمجية. على وجه الخصوص، يتيح تعيين نتائج تنفيذ الأوامر إلى المتغيرات استخدام تلك النتائج في العمليات اللاحقة. يناقش هذا المقال الطرق الأساسية والأمثلة العملية للقيام بذلك. دعونا نعمق فهمنا وتطبيق استخدام سطر الأوامر في لينكس من خلال هذا الاستكشاف.
طرق التعيين الأساسية
في لينكس، لتعيين نتائج تنفيذ الأوامر إلى المتغيرات، يمكنك استخدام إما العلامات العكسية (`) أو بناء الجملة $( ). بينما كلا الطريقتين متساويتان في الوظيفة، يُفضل استخدام بناء الجملة $( ) لقراءتها السهلة وسهولة التداخل.
استخدام العلامات العكسية
result=`date`
echo $result
في السكريبت أعلاه، يتم تعيين نتيجة تنفيذ أمر date
إلى المتغير result
، ويتم عرض قيمته باستخدام أمر echo
. ومع ذلك، قد يكون من الصعب التمييز بين العلامات العكسية وعلامات الاقتباس (‘ أو “), مما قد يؤدي إلى الخلط.
استخدام بناء الجملة $( )
result=$(date)
echo $result
تقوم هذه الطريقة بتعيين نتيجة تنفيذ أمر date
إلى المتغير result
. يسهل بناء الجملة $( ) التداخل، مما يجعله أكثر ملاءمة للتعامل مع تركيبات أكثر تعقيدًا من الأوامر.
إتقان هذه الطريقة الأساسية للتعيين يحسن بشكل كبير من كفاءة العمل في لينكس. ستقدم الفقرة التالية شرحًا أكثر تفصيلًا للتعامل مع نتائج تنفيذ الأوامر.
التعامل مع نتائج تنفيذ الأوامر
بعد تعيين نتائج تنفيذ الأوامر إلى متغير، يمكنك استخدام ذلك المتغير لأداء عمليات مختلفة. هنا، سنناقش بعض الطرق الأساسية لاستخدام نتائج التنفيذ.
استخدام قيمة المتغير
يمكن استخدام القيمة المعينة إلى متغير في أي مكان في السكريبت عن طريق الإشارة إلى ذلك المتغير. للإشارة إلى متغير، أضف علامة الدولار ($) قبل اسمه.
# تعيين نتيجة أمر إلى متغير
file_count=$(ls | wc -l)
# عرض قيمة المتغير
echo "عدد الملفات في الدليل الحالي هو: $file_count"
استخدامها في التفرع الشرطي
من الممكن أيضًا استخدام نتيجة التنفيذ المعينة إلى متغير كأساس للتفرع الشرطي. هذا يسمح بإنشاء سكريبتات تؤدي أفعالًا مختلفة بناءً على نتائج الأوامر.
# التحقق من وجود ملف معين
file_name="example.txt"
if [ -e "$file_name" ]; then
echo "$file_name موجود."
else
echo "$file_name غير موجود."
fi
استخدامها في معالجة الحلقات
استخدام نتائج التنفيذ المعينة إلى متغير في معالجة الحلقات يسمح بأداء سلسلة من العمليات على كل عنصر من النتائج.
# أداء العمليات على كل ملف في دليل
for file in $(ls)
do
echo "معالجة $file..."
# وصف العملية لكل ملف هنا
done
من خلال تعيين نتائج التنفيذ إلى المتغيرات واستخدام تلك القيم داخل السكريبتات، يصبح من الممكن إنشاء سكريبتات قوقعة مرنة وقوية. ستتناول الفقرة التالية التعامل مع المخرجات المتعددة الأسطر.
التعامل مع المخرجات متعددة الأسطر
عندما تمتد نتائج تنفيذ الأوامر عبر عدة أسطر، من المهم معرفة كيفية التعامل مع هذه النتائج بكفاءة. توسع تقنيات تعيين المخرجات متعددة الأسطر إلى المتغيرات ومعالجتها باستخدام الحلقات أو المصفوفات تطبيقات السكريبتات.
معالجة المخرجات متعددة الأسطر بحلقة
عند معالجة نتائج الأوامر سطرًا بسطر، استخدام حلقة for
شائع. ومع ذلك، قد يؤدي هذا النهج إلى سلوكيات غير مقصودة حيث يتم معالجة كل عنصر مقسم بواسطة فراغ في كل تكرار من الحلقة. طريقة أكثر أمانًا للتعامل مع المخرجات متعددة الأسطر تشمل دمج حلقة while
مع أمر read
.
# معالجة المخرجات متعددة الأسطر بأمان في حلقة
ls | while read line; do
echo "معالجة الملف: $line";
done
في هذه الطريقة، يتم تمرير مخررج المخرج لأمر ls
إلى حلقة while read
باستخدام pipe، وتعالج كل تكرار من الحلقة سطرًا واحدًا في كل مرة.
تعيين المخرجات متعددة الأسطر إلى مصفوفة
في قوقعة bash، من الممكن أيضًا تعيين المخرجات متعددة الأسطر إلى مصفوفة، مما يسمح بالوصول السهل إلى أسطر محددة أو تحديد عدد العناصر في المصفوفة.
# تعيين مخرج الأمر إلى مصفوفة
file_list=($(ls))
# عرض محتويات المصفوفة
for file in "${file_list[@]}"; do
echo "الملف: $file";
done
في هذا السكريبت، يتم تعيين مخرج أمر ls
إلى المصفوفة file_list
. ثم تعالج حلقة كل عنصر من المصفوفة، عارضة أسماء الملفات.
التعامل الفعال مع المخرجات متعددة الأسطر يعزز بشكل كبير المرونة والتعبيرية للسكريبتات. إتقان هذه التقنيات يمكن من إنشاء سكريبتات قوقعة أكثر تعقيدًا. ستناقش الفقرة التالية طرق تعيين مخرجات الخطأ.
طرق تعيين مخرجات الخطأ
في كتابة السكريبتات لقوقعة لينكس، من الممكن تعيين ليس فقط المخرج القياسي من الأوامر ولكن أيضًا مخرجات الخطأ إلى المتغيرات. التعامل السليم مع مخرجات الخطأ ضروري لتحسين موثوقية وقابلية استخدام السكريبتات.
تعيين مخرج الخطأ القياسي إلى المتغيرات
لتعيين مخرج الخطأ القياسي إلى المتغيرات، تحتاج إلى إعادة توجيه مخرج الخطأ للأمر إلى المخرج القياسي ثم تعيين هذه النتيجة إلى متغير. يتم ذلك باستخدام بناء الجملة 2>&1
.
# تعيين مخرج الخطأ القياسي إلى متغير
error_output=$(ls non_existing_file 2>&1)
echo $error_output
في هذا المثال، يتم محاولة تنفيذ أمر ls
على ملف غير موجود. يتم تعيين مخرج الخطأ القياسي (رسالة الخطأ) إلى المتغير error_output
، والذي يتم عرضه بعد ذلك.
تعيين المخرج القياسي ومخرج الخطأ القياسي إلى متغيرات منفصلة
إذا كنت ترغب في التعامل مع المخرج القياسي ومخرج الخطأ القياسي بشكل منفصل، يمكنك إعادة توجيههما إلى متغيرات مختلفة أثناء تنفيذ الأمر.
# تعيين المخرج القياسي ومخرج الخطأ القياسي إلى متغيرات مختلفة
{ output=$(command 2>&1 1>&3 3>&-); } 3>&1
error=$output
هذه الطريقة معقدة بعض الشيء ولكنها تسمح بتعيين المخرج القياسي ومخرج الخطأ القياسي إلى متغيرات بشكل مستقل، مما يتيح المعالجة المنفصلة لكل منهما.
تجاهل مخرج الخطأ
في بعض الحالات، قد ترغب في تجاهل مخرجات الخطأ بالكامل. لتجاهل مخرج الخطأ، قم بإعادة توجيهه إلى /dev/null
.
# تجاهل مخرج الخطأ
output=$(command 2>/dev/null)
في هذا الأمر، يتم إعادة توجيه مخرج الخطأ إلى /dev/null
، ويتم تعيين المخرج القياسي فقط إلى المتغير. هذا يسمح بمتابعة العمليات بدون الأخذ بعين الاعتبار رسائل الخطأ.
التعامل المناسب مع مخرجات الخطأ ضروري لتحسين التعامل مع الأخطاء في السكريبتات وبناء أنظمة أكثر متانة. ستقدم الفقرة التالية أمثلة عملية للسكريبتات تستخدم هذه التقنيات.
أمثلة عملية للسكريبتات
سنقدم بعض الأمثلة العملية للسكريبتات التي توضح كيفية استخدام نتائج تنفيذ أوامر لينكس المعينة إلى المتغيرات في سيناريوهات واقعية. تطبق هذه الأمثلة التقنيات التي نوقشت سابقًا، من طرق التعيين الأساسية إلى التعامل مع مخرجات الخطأ.
التحقق من استخدام القرص والتحذير إذا تجاوز العتبة
سكريبت يراقب استخدام القرص ويصدر رسالة تحذير إذا تم تجاوز عتبة معينة. يُستخدم أمر df
للحصول على نسب استخدام القرص، ويتم استخدام التفرع الشرطي للتحقق من العتبة.
# الحصول على نسبة استخدام القرص
disk_usage=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')
alert_threshold=90
# التحقق مما إذا كان الاستخدام يتجاوز العتبة
if [ $disk_usage -gt $alert_threshold ]; then
echo "استخدام القرص أعلى من العتبة: ${disk_usage}%";
else
echo "استخدام القرص ضمن الحدود الطبيعية: ${disk_usage}%";
fi
التحقق من استجابة خادم الويب وإعادة تشغيله إذا لم يستجب
سكريبت يتحقق من استجابة URL معين باستخدام أمر curl
ويعيد تشغيل خدمة خادم الويب إذا لم يتم استلام استجابة. يطبق هذا السكريبت الطرق للتعامل مع مخرجات الخطأ.
# التحقق من استجابة خادم الويب
response=$(curl -s -o /dev/null -w "%{http_code}" http://yourwebsite.com)
# إذا لم يكن رمز الحالة HTTP هو 200، أعد تشغيل الخدمة
if [ "$response" != "200" ]; then
echo "لا استجابة من الخادم، جارٍ إعادة تشغيل خدمة الويب.";
systemctl restart nginx
else
echo "الخادم يستجيب بشكل طبيعي.";
fi
الحصول على قائمة الحزم المثبتة على النظام وحفظها في ملف
سكريبت يسترجع قائمة الحزم المثبتة على النظام ويحفظ تلك القائمة في ملف. يتم تعيين نتيجة تنفيذ أمر dpkg
(المستخدم في أنظمة مبنية على Debian) إلى متغير ثم توجيهها إلى ملف.
# الحصول على قائمة الحزم المثبتة
installed_packages=$(dpkg --list | grep ^ii)
# حفظ القائمة في ملف
echo "$installed_packages" > installed_packages_list.txt
تعتبر هذه الأمثلة للسكريبتات أساسًا لأتمتة مهام إدارة النظام الروتينية. من خلال تعيين نتائج تنفيذ الأوامر إلى المتغيرات، تصبح إدارة وأتمتة أنظمة لينكس أكثر مرونة وكفاءة.
الخلاصة
تعتبر تقنية تعيين نتائج أوامر لينكس إلى المتغيرات تقنية قوية في كتابة السكريبتات. غطى هذا المقال كل شيء من طرق التعيين الأساسية إلى التعامل مع المخرجات متعددة الأسطر ومخرجات الخطأ، فضلًا عن تطبيق هذه في أمثلة عملية للسكريبتات. من خلال الاستفادة من هذه المعرفة، يمكنك جعل إدارة نظام لينكس وإنشاء السكريبتات أكثر مرونة وكفاءة. إتقان تقنية تعيين نتائج تنفيذ الأوامر إلى المتغيرات سيرفع مهاراتك في كتابة السكريبتات إلى المستوى التالي.