مضى على الشبكة و يوم من العطاء.

User Interface!

  • بادئ الموضوع بادئ الموضوع speed
  • تاريخ البدء تاريخ البدء

speed

./عضو جديد

السمعة:

هذا هو القسم الأخير في البرنامج التعليمي وأود استخدامه لمناقشة موضوع مهم للغاية (والذي غالبًا ما يتم إهماله) واجهة المستخدم. لقد تطرقت إلى نقاط مختلفة تتعلق بواجهة المستخدم خلال البرنامج التعليمي ولكن هنا سأجمعها جميعًا معًا وأقدم بعض المفاهيم الأخرى أيضًا.

عندما يفكر معظم الناس في واجهة المستخدم ، فإنهم يفكرون في البتات التي يراها المستخدم النهائي وكيف يتفاعلون مع الأداة. بالنسبة لنصوص Bash ، أود التفكير في تخطيط وهيكل الأوامر داخل البرنامج النصي أيضًا. غالبًا ما تكون نصوص Bash عبارة عن أدوات صغيرة تُستخدم لأتمتة المهام الشاقة والمتكررة. يمكن قراءتها دائمًا بواسطة المستخدم النهائي وغالبًا ما يتم تعديلها لتلائم المتطلبات المتغيرة. لذلك فإن السهولة التي يمكن للمستخدم (غالبًا بنفسك) من تعديل النص وتوسيعه مهمة جدًا أيضًا.

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
1. 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).

image

image
قد يستخدم البرنامج النصي الخاص بك واحدًا أو مجموعة من هذه العناصر ولكن يجب أن يهدف دائمًا إلى أن يكون الأكثر ملاءمة للمستخدم.

تعتبر وسيطات سطر الأوامر جيدة حيث سيتم الاحتفاظ بها في سجل المستخدمين مما يسهل عليهم إعادة تشغيل الأوامر. تكون وسيطات سطر الأوامر ملائمة أيضًا عندما لا يتم تشغيل البرنامج النصي مباشرة بواسطة المستخدم (على سبيل المثال ، كجزء من برنامج نصي آخر أو مهمة 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 جيد بشكل معقول الآن ولكنه سيتحسن مع الممارسة فقط.
النهايه
 
التعديل الأخير:

آخر المشاركات

عودة
أعلى