الفرق بين المراجعتين لصفحة: «Bash/displaying user messages»
أسامه-دمراني (نقاش | مساهمات) مراجعة4: تعديل رابط |
أسامه-دمراني (نقاش | مساهمات) مراجعة 6: إضافة تصانيف |
||
سطر 163: | سطر 163: | ||
[[تصنيف:Bash User Messages]] | [[تصنيف:Bash User Messages]] | ||
[[تصنيف:Bash Interactive Scripts]] | [[تصنيف:Bash Interactive Scripts]] | ||
[[تصنيف:Bash Scripts]] | |||
[[تصنيف:Bash Echo Command]] | |||
[[تصنيف:Bash Arguments]] |
المراجعة الحالية بتاريخ 00:25، 7 سبتمبر 2018
برامج تفاعلية أم غير تفاعلية؟
تعمل بعض برامج الصدفة (shell scripts) دون أي تدخل من المستخدم ويطلق عليها برامج غير تفاعلية، ومن بعض مزايا تلك البرامج أنها تعمل بشكل متوقع في كل مرة، ويمكنها العمل في الخلفية أيضًا. لكن باقي برامج الصدفة تحتاج إدخالًا من المستخدم أو تحتاج أن تطبع رسائل للمستخدم أثناء عملها، ولذلك النوع من البرامج مزايا كذلك، إذ يمكن بناء برامج أكثر مرونة، ويمكن للمستخدم تخصيص البرنامج أثناء تشغيله أو جعله يتصرف بأشكال مختلفة، كما يمكن للبرنامج أن يرسل تقاريرًا أثناء تشغيله.
لا تتكاسل عن كتابة التعليقات في برامجك أثناء كتابة برامج تفاعلية، فالبرامج التي تطبع رسائل مناسبة تكون صديقة للمستخدم أكثر ويسهل تصحيح أخطائها (Debugging)، وقد يكون برنامجك ممتازًا لكن رغم ذلك تجد نفسك تتلقى اتصالات طلبًا للدعم الفني إن لم يكن البرنامج يخبر المستخدم بما ينفِّذُه، لذا تأكد من وضع رسائل تخبر المستخدم على سبيل المثال أن ينتظر ظهور الخَرْج لأن البرنامج يجري حسابات الآن. كذلك حاول -كلما أمكن- أن تقدم تقديرًا لطول العملية الجارية أو المدة التي يجب أن ينتظرها المستخدم، فإن كان الانتظار سيطول فربما يجب أن تضع مؤشرًا لتقدم العملية في خرج برنامجك.
كذلك يُفضَّل في حالة طلب إدخالٍ من المستخدم أن تعطي معلومات واضحة وشافية عن البيانات التي تود من المستخدم أن يدخلها، وينطبق هذا على فحص الوسائط (arguments) ورسائل الاستخدام (Usage Messages) المصاحِبة لها أيضًا.
والأوامر التي تستخدمها لتطبع تعليقاتك للمستخدم هي echo
و printf
، وسنناقش بعض الأمثلة فيما يلي رغم أنك قد تكون معتادًا على استخدام echo
بالفعل.
استخدام أمر echo
يُخرج أمر echo
وسائطه (arguments) مفصولين بمسافات وينتهون بمحرف السطر الجديد، وتكون حالة الإعادة صفرًا على الدوام. كذلك يأخذ أمر echo
بضعة خيارات:
e-
: يفسر المحارف المهرَّبة بمحرف الشرطة المائلة (انظر محارف الهروب في فصل اقتباس المحارف).
n-
: يوقف عمل السطر الجديد في نهاية الأمر (trailing new line).
إليك مثالًا عن إضافة التعليقات سنستخدم فيه مثاليْن من قسم فحص وسائط سطر الأوامر، فصل الاستخدامات المتقدمة لعبارة if الشرطية:
hsoub ~/test> cat penguin.sh
#!/bin/bash
# (Tux) هذا البرنامج يسمح لك بتقديم أطعمة إلى البطريق
# لن يكون البطريق سعيدًا إلا حين يُعطى سمكة، وقد أضفينا قليلًا من المرح بإضافة بعض الحيوانات الأخرى
if [ "$menu" == "fish" ]; then
if [ "$animal" == "penguin" ]; then
echo -e "Hmmmmmm fish... Tux is happy!\n"
elif [ "$animal" == "dolphin" ]; then
echo -e "\a\a\aPweetpeettreetppeterdepweet!\a\a\a\n"
else
echo -e "*prrrrrrrt*\n"
fi
else
if [ "$animal" == "penguin" ]; then
echo -e "Tux doesn't like that. Tux wants fish!\n"
exit 1
elif [ "$animal" == "dolphin" ]; then
echo -e "\a\a\a\a\a\aPweepwishpeeterdepweet!\a\a\a"
exit 2
else
echo -e "Will you read this sign?! Don't feed the "$animal"s!\n"
exit 3
fi
fi
michel ~/test> cat feed.sh
#!/bin/bash
# penguin.sh يتصرف هذا البرنامج وفقًا لحالة الخروج التي يعطيها برنامج
if [ "$#" != "2" ]; then
echo -e "Usage of the feed script:\t$0 food-on-menu animal-name\n"
exit 1
else
export menu="$1"
export animal="$2"
echo -e "Feeding $menu to $animal...\n"
feed="/nethome/anny/testdir/penguin.sh"
$feed $menu $animal
result="$?"
echo -e "Done feeding.\n"
case "$result" in
1)
echo -e "Guard: \"You'd better give'm a fish, less they get violent...\"\n"
;;
2)
echo -e "Guard: \"No wonder they flee our planet...\"\n"
;;
3)
echo -e "Guard: \"Buy the food that the Zoo provides at the entry, you ***\"\n"
echo -e "Guard: \"You want to poison them, do you?\"\n"
;;
*)
echo -e "Guard: \"Don't forget the guide!\"\n"
;;
esac
fi
echo "Leaving..."
echo -e "\a\a\aThanks for visiting the Zoo, hope to see you again soon!\n"
michel ~/test> feed.sh apple camel
Feeding apple to camel...
Will you read this sign?! Don't feed the camels!
Done feeding.
Guard: "Buy the food that the Zoo provides at the entry, you ***"
Guard: "You want to poison them, do you?"
Leaving...
Thanks for visiting the Zoo, hope to see you again soon!
hsoub ~/test> feed.sh apple
Usage of the feed script: ./feed.sh food-on-menu animal-name
انظر محارف الهروب للمزيد من الشرح المفصل عنها.
يبين الجدول التالي التسلسلات التي يتعرف عليها أمر echo
:
جدول 8-1: التسلسلات التي يستخدمها أمر echo
:
التسلسل | المعنى |
---|---|
a\
|
إنذار (جرس). |
b\
|
مسافة للخلف (Backspace)، يمسح المحرف الذي قبله. |
c\
|
يوقف السطر الجديد في نهاية الأمر (trailing newline). |
e\
|
محرف الهروب Escape. |
f\
|
الانتقال إلى الصفحة الجديدة (Form Feed)، ينقل المؤشر صفحة كاملة للأمام، أو ينقله إلى بداية الصفحة التالية. |
n\
|
سطر جديد. |
r\
|
محرف العودة إلى بداية السطر (Carriage Return)، يماثل الضغط على مفتاح Enter. |
t\
|
مسافة جدولة أفقية (يماثل الضغط على زر tab). |
v\
|
مسافة جدولة رأسية (يماثل الضغط على زر tab). |
\\
|
شرطة مائلة خلفية، تظهر كشرطة مائلة بدل أن تفسرها الصدفة. |
0NNN\
|
محرف بايت -8 بت- قيمته هي القيمة الثُمانية NNN (صفرًا إلى ثلاثة أرقام ثُمانيَّة). |
NNN\
|
محرف بايت قيمته هي القيمة الثُمانيَّة NNN (رقم إلى ثلاثة أرقام ثُمانيَّة). |
xHH\
|
محرف بايت قيمته هي القيمة السداسية العشرية HH (رقم سداسي عشري أو رقمين). |
انظر صفحات دليل info للمزيد عن أمر printf
والأسلوب الذي يسمح لك به بصياغة المخرجات، انتبه أنه قد تكون هناك فروقات بين الإصدارات المختلفة من Bash.