speed
./عضو جديد



السمعة:
- إنضم3 مايو 2023
- المشاركات 26
- مستوى التفاعل 74
- النقاط 13
هذا هو القسم الأخير في البرنامج التعليمي وأود استخدامه لمناقشة موضوع مهم للغاية (والذي غالبًا ما يتم إهماله) واجهة المستخدم. لقد تطرقت إلى نقاط مختلفة تتعلق بواجهة المستخدم خلال البرنامج التعليمي ولكن هنا سأجمعها جميعًا معًا وأقدم بعض المفاهيم الأخرى أيضًا.المقدمه
عندما يفكر معظم الناس في واجهة المستخدم ، فإنهم يفكرون في البتات التي يراها المستخدم النهائي وكيف يتفاعلون مع الأداة. بالنسبة لنصوص Bash ، أود التفكير في تخطيط وهيكل الأوامر داخل البرنامج النصي أيضًا. غالبًا ما تكون نصوص Bash عبارة عن أدوات صغيرة تُستخدم لأتمتة المهام الشاقة والمتكررة. يمكن قراءتها دائمًا بواسطة المستخدم النهائي وغالبًا ما يتم تعديلها لتلائم المتطلبات المتغيرة. لذلك فإن السهولة التي يمكن للمستخدم (غالبًا بنفسك) من تعديل النص وتوسيعه مهمة جدًا أيضًا.
tput هو أمر يسمح لك بالتحكم في المؤشر الموجود على الجهاز وتنسيق المحتوى الذي تتم طباعته. إنها أداة قوية ومعقدة إلى حد ما ، لذا سأقدم بعض الأساسيات هنا ولكن أترك الأمر لك لإجراء مزيد من البحث.tput
فيما يلي مثال لطباعة رسالة في وسط الشاشة.
كود:
#!/bin/bash
# Print message in center of terminal
cols=$( tput cols )
rows=$( tput lines )
message=$@
input_length=${#message}
half_input_length=$(( $input_length / 2 ))
middle_row=$(( $rows / 2 ))
middle_col=$(( ($cols / 2) - $half_input_length ))
tput clear
tput cup $middle_row $middle_col
tput bold
echo $@
tput sgr0
tput cup $( tput lines ) 0
cols=$( tput cols )
: يتم استخدام الأمر tput cols
للحصول على عدد الأعمدة (عرض الشاشة) ويتم تخزينه في المتغير cols
.2.
rows=$( tput lines )
: يستخدم الأمر tput lines
للحصول على عدد الصفوف (ارتفاع الشاشة) ويتم تخزينه في المتغير rows
.3.
message=$@
: يتم تخزين النص الذي تم إدخاله كمعاملات عند تشغيل السكريبت في المتغير message
.4.
input_length=${#message}
: يتم استخدام ${#message}
للحصول على طول النص المخزن في المتغير message
ويتم تخزينه في المتغير input_length
.5.
half_input_length=$(( $input_length / 2 ))
: يتم حساب نصف طول النص المخزن في المتغير message
ويتم تخزينه في المتغير half_input_length
باستخدام العملية الحسابية $(( ))
.6.
middle_row=$(( $rows / 2 ))
: يتم حساب وسط الصفوف (مركز الشاشة عموديًا) بقسمة عدد الصفوف على 2 وتخزين النتيجة في المتغير middle_row
.7.
middle_col=$(( ($cols / 2) - $half_input_length ))
: يتم حساب وسط الأعمدة (مركز الشاشة أفقيًا) بقسمة عدد الأعمدة على 2 وطرح نصف طول النص المخزن في المتغير message
وتخزين النتيجة في المتغير middle_col
.8.
tput clear
: يتم استخدام الأمر tput clear
لمسح الشاشة.9.
tput cup $middle_row $middle_col
: يتم استخدام الأمر tput cup
لنقل المؤشر إلى الموقع المحدد بواسطة الصف الأفقي ($middle_row
) والعمود العمودي ($middle_col
) على الشاشة.10.
tput bold
: يتم استخدام الأمر tput bold
لتفعيل نمط الخط العريض (bold).11.
echo $@
: يتم استخدام الأمر echo
لطباعة النص المخزن في المتغير message
.12.
tput sgr0
: يتم استخدام الأمر tput sgr0
لإعادة إعدادات النص إلى الوضع الافتراضي.13.
tput cup $( tput lines ) 0
: يتم استخدام الأمر tput cup
لنقل المؤشر إلى أسفل الشاشة في العمود الأول (0).قد يستخدم البرنامج النصي الخاص بك واحدًا أو مجموعة من هذه العناصر ولكن يجب أن يهدف دائمًا إلى أن يكون الأكثر ملاءمة للمستخدم.Supplying Data
تعتبر وسيطات سطر الأوامر جيدة حيث سيتم الاحتفاظ بها في سجل المستخدمين مما يسهل عليهم إعادة تشغيل الأوامر. تكون وسيطات سطر الأوامر ملائمة أيضًا عندما لا يتم تشغيل البرنامج النصي مباشرة بواسطة المستخدم (على سبيل المثال ، كجزء من برنامج نصي آخر أو مهمة cron ، إلخ).
يُعد إعادة التوجيه من STDIN أمرًا جيدًا عندما يتصرف البرنامج النصي الخاص بك كمرشح ويقوم فقط
بتعديل أو إعادة تنسيق البيانات التي يتم تغذيتها به.
تعتبر القراءة التفاعلية أمرًا جيدًا عندما لا تعرف البيانات التي قد تكون مطلوبة حتى يتم تشغيل البرنامج النصي بالفعل. على سبيل المثال قد تحتاج إلى توضيح بعض المدخلات المشبوهة أو الخاطئة. يُطلب أيضًا كلمات المرور بشكل مثالي بهذه الطريقة حتى لا يتم الاحتفاظ بها كنص عادي في المستخدمين
فكر في مدى صرامة البيانات المقدمة أيضًا. كلما كنت أكثر مرونة ، كلما كان المستخدم النهائي أكثر سعادة. فكر في شخص يقدم موعدًا كحجة. يمكنهم توفير التاريخ على النحو التالي:Input Flexibility
17-07-2023
or
17/07/2023
or
17: 07: 2023
يمكننا كتابة السيناريو الخاص بنا للإصرار على الإدخال بتنسيق معين واحد فقط. سيكون هذا أسهل بالنسبة لنا ولكنه قد لا يكون مناسبًا للمستخدم النهائي. ماذا لو أرادوا إدخال التاريخ على النحو المنصوص عليه من أمر أو مصدر آخر يوفره بتنسيق مختلف؟
يجب أن نهدف دائمًا إلى أن نكون أكثر ملاءمة للمستخدم النهائي كما نعارضه نحن. بعد كل شيء ، سوف نكتبها مرة واحدة ولكنهم سيقومون بتشغيلها عدة مرات.
كود:
#!/bin/bash
# A date is the first command line argument
clean_date=$( echo $1 | sed 's/[ /:\^#]/-/g' )
echo $clean_date
تذكر أن المحطة الطرفية وطبيعة الأوامر التي تستخدمها عادة ما تكون مختلفة قليلاً عن تفاعلك العادي مع أجهزة الكمبيوتر في واجهة مستخدم رسومية. مرة أخرى نريد ما هو الأكثر ملاءمة للمستخدم. غالبًا ما يكون هذا فقط لطباعة الإخراج كنتيجة بسيطة ، دون أي تنسيق أو رسائل خيالية تحيط به. ثم يكون من الأسهل للمستخدم إعادة توجيه الإخراج إلى أوامر أخرى لمزيد من المعالجة أو إلى ملف للحفظ.[COLOR=#]Presenting Data[/COLOR]
يعد تقديم الكود الخاص بك أمرًا مهمًا للغاية ويجب أن تفخر به. تجعل البنية الجيدة من السهل عليك معرفة ما تفعله الشفرة ويصعب عليك ارتكاب أخطاء سخيفة (والتي يمكن أن تضيع الكثير من الوقت بسهولة أو قد تكون أسوأ إذا لم تدرك الخطأ).Organising Your Code
من الشائع اتباع نهج “نعم نعم ، هذا أشخاص آخرون ، لا أرتكب تلك الأخطاء السخيفة حتى أكون كسولًا وأكتب تعليمات برمجية قذرة وسيكون الأمر على ما يرام.” يمكن للجميع ارتكاب الأخطاء ، حتى وكالة ناسا. خذ الوقت الكافي لبناء الكود الخاص بك جيدًا وبعد ذلك ستكون ممتنًا لأنك فعلت.
ضع مسافة بادئة للشفرة ومسافاتها جيدًا بحيث يمكن تمييز الأقسام المختلفة بسهولة.
اسم المتغيرات والوظائف بأسماء وصفية بحيث يكون من الواضح ما تمثله وتفعله
استخدم التعليقات حيثما كان ذلك مناسبًا لشرح جزء صغير من الكود الذي لا يتضح على الفور عملية التشغيل.
استخدم التعليقات حيثما كان ذلك مناسبًا لشرح جزء صغير من الكود الذي لا يتضح على الفور عملية التشغيل.
حسنًا ، لقد عملت من خلال تعليمي Bash. تهانينا ، لقد اكتسبت الآن بعض المهارات والمعرفة القوية والمفيدة للغاية. بعد ذلك تحتاج إلى اكتساب الخبرة. لا شك أن برنامج Bash scripting foo جيد بشكل معقول الآن ولكنه سيتحسن مع الممارسة فقط.Final Word
النهايه
التعديل الأخير: