[تفاعلي] أوامر باشية


(فهد الدريبي) #1

الموضوع هذا خاص بكتابة السكربت خاصة باستخدام لغة باش bash
شاركنا بما تكتشفه من طرق استخدامها والتعامل معها.

###تنقيح مشاكل البرمجة بالباش

احد المشاكل التي تواجهني عند كتابة سكربت جديد او تنفيذ سكربت كبير هي اكتشاف العلل وحلها. قد لاتدري باي خطوة حصلت المشكلة وما محتوى المتغيرات وقت التنفيذ …الخ

الحل القديم الذي كنت استخدمة هو ادراج امر echo بعد كل خطوة لمعرفة ماحصل ثم ازالتها جميعها بعد حل المشكلة وهذه طريقة مزعجة. لكن مؤخرا اكتشفت طريقة سهلة جدا لحل المشكلة.

اولا هذا مثال لتنفيذ سكربت بدون الحل الجديد:

# ./sign_drivers.sh `uname -r`                                                                                                                                                                             
#

####الحل

في اول سطر من السكربت اضف التالي:

#!/bin/bash -x

اضافة -x بعد الامر يجعل باش يطبع الاموامر التي ينفذها وكذلك المتغيرات ومحتواها ويسبق تلك الاسطر علامة + للدلالة على انه ليس من مخرجات السكربت نفسة

مخرجات السكبرت السابق بعد التعديل:

# ./sign_drivers.sh `uname -r`
+ KVER=4.3.3-300.fc23.x86_64                                                                                                                                                                                                         
+ PRIVATEKEY=/etc/cert/private_key.priv                                                                                                                                                                               
+ PUBLICKEY=/etc/cert/public_key.der                                                                                                                                                                                  
+ SIGNSCRIPT=/usr/src/kernels/4.3.3-300.fc23.x86_64/scripts/sign-file                                                                                                                                                                
+ /usr/src/kernels/4.3.3-300.fc23.x86_64/scripts/sign-file sha256 /etc/cert/private_key.priv /etc/cert/public_key.der /usr/lib/modules/4.3.3-300.fc23.x86_64/extra/bbswitch.ko                         
+ /usr/src/kernels/4.3.3-300.fc23.x86_64/scripts/sign-file sha256 /etc/cert/private_key.priv /etc/cert/public_key.der /usr/lib/modules/4.3.3-300.fc23.x86_64/extra/vboxdrv.ko                                              
# 

ويمكن التحكم بتفعيلها وتعطيلها من داخل السكربت بالامرين التاليين:

set -x
set +x

يمكن كذلك تفعيلها وبدون التعديل على الملف (اذا كان التنقيح مؤقتاً) كالتالي:

# bash -x ./sign_drivers.sh `uname -r`

#2

الأمر hash
يعطيك مسار الأمر في /bin/
ويظهر لك أخر الأوامر المستخدمه وعدد مرات إستخدمها :


(علي لينكس) #3

المتغير $؟ يقوم بإعطائك ارقام بحيث إذا كان الرقم 0 يعني تم تنفيذ الامر بالشكل الصحيح وإذا كان الرقم 1 يعني تم تنفيذ الامر بالشكل الغير صحيح ويوجد علة, بإمكانك إستعمال الفكرة في الشروط على سبيل المثال والاشياء الاخرى على حسب فكرتك


(ahmad) #4

امر -n تقوم بعمل debug لملف الشيل اذا يوجد خطا في الاوامر فيعطيك مكانها
وهذا الامر يقوم بذلك من دون تشغيل الملف فقط معاينة الاكواد

sh -n test.sh
bash -n test.sh

او نقوم بكتابته داخل ملف الشيل كاضافة مع اول سطر

#!/bin/bash -n