كيفية إضافة واجهة المستخدم الرسومية إلى البرامج النصية لـ Linux Shell
نشرت: 2022-01-29 يمكنك استخدام نوافذ واجهة المستخدم الرسومية وشرائح التمرير وأزرار الاختيار وأشرطة التقدم والمزيد في نصوص Bash النصية. تعرف على كيفية استخدام مجموعة أدوات zenity
على نصوص Bash النصية الخاصة بك. سنوضح لك كيف.
تعد Bash scripting لغة برمجة قوية ، ولأنها مدمجة في Bash shell ، فهي متاحة بسهولة للجميع. إنها لغة سهلة لبدء البرمجة. ولأنها مفسرة ، لا تحتاج إلى تجميع البرامج النصية الخاصة بك. بمجرد تحرير ملف البرنامج النصي وجعله قابلاً للتنفيذ ، يمكنك تشغيله. هذا يجعل دورة الترميز والتشغيل والتصحيح فعالة للغاية.
هناك شكوتان رئيسيتان لدى الأشخاص بشأن نصوص Bash ، الأولى هي السرعة. نظرًا لأن Bash shell يفسر الأوامر الموجودة في البرنامج النصي ، فإنها لا تنفذ بالسرعة التي يتم بها تنفيذ التعليمات البرمجية المجمعة. ومع ذلك ، فإن هذا يشبه الشكوى من أن الجرار ليس بنفس سرعة السيارة ؛ هم مخصصون لأشياء مختلفة.
هناك نوعان من السرعة. يمكنك غالبًا تجميع نص سريع واستخدامه لأداء مهمة بسرعة أكبر بكثير من تطوير حل بلغة مترجمة ، مثل C.
الشكوى الثانية لدى الأشخاص مع البرامج النصية Bash هي واجهة المستخدم - إنها نافذة طرفية. بالطبع ، لا تهم الواجهة أحيانًا. إذا كان الشخص الوحيد الذي سيستخدم البرنامج النصي هو مؤلفه ، فمن المحتمل ألا تكون الواجهة بهذه الأهمية. ولا يهم أيضًا البرامج النصية التي تقوم بمعالجة الخلفية ونوع الدُفعات. عادةً ، لا تحتاج مثل هذه البرامج النصية إلى الكثير من تفاعل المستخدم (إن وجد).
هناك مناسبات تحتاج فيها إلى شيء أكثر سهولة وحداثة من النافذة الطرفية. معظم الناس معتادون على واجهة المستخدم الرسومية (GUI). لمنح الأشخاص تجربة خالية من الاحتكاك قدر الإمكان ، عليك إنشاء عناصر واجهة المستخدم الرسومية واستخدامها من البرامج النصية الخاصة بك.
تطبيق zenity
يسمح لك zenity
بدمج مجموعة كبيرة من عناصر الواجهة الرسومية في نصوص Bash النصية. إنها مجموعة أدوات قوية تضفي على نصوصك إحساسًا عصريًا ومظهرًا معاصرًا ومألوفًا.
تم تثبيت zenity
مسبقًا على توزيعات Ubuntu و Fedora و Manjaro. إنه جزء من جنوم. إذا كنت تستخدم KDE ، فقد ترغب في التحقق من kdialog
بدلاً من ذلك ، على الرغم من أن zenity
يعمل على أي بيئة سطح مكتب.
توضح الأمثلة الواردة في هذه المقالة كيفية إنشاء إطارات حوار مختلفة من سطر الأوامر ، وكيفية التقاط قيم الإرجاع وتحديدات المستخدم في المتغيرات ، وكيفية استخدام نوافذ الحوار في البرامج النصية.
ننتهي من تطبيق صغير يستخدم جميع أنواع نوافذ الحوار الثلاثة.
نافذة حوار التقويم
تسمح نافذة حوار التقويم لشخص ما بتحديد تاريخ. لإنشاء واحدة zenity
يتطلب أمرًا واحدًا من كلمتين:
روعة - التقويم
تظهر نافذة حوار التقويم. يحتوي هذا على جميع الوظائف التي تتوقعها من منتقي التاريخ القياسي. يمكنك تغيير الشهر والسنة والنقر على يوم لتحديد ذلك التاريخ. بشكل افتراضي ، يتم تمييز تاريخ اليوم عند ظهور النافذة.
انقر فوق "موافق" لإغلاق نافذة الحوار وتحديد التاريخ المميز. النقر المزدوج فوق التاريخ يفعل نفس الشيء.
إذا كنت لا تريد تحديد تاريخ ، فانقر فوق "إلغاء" ، أو اضغط على مفتاح "Esc" في لوحة المفاتيح ، أو أغلق نافذة الحوار.
في المثال أعلاه ، تم تحديد 19 أغسطس 2019. إذا نقر المستخدم على "موافق" ، يتم إغلاق التقويم ، ويتم طباعة التاريخ المحدد في نافذة المحطة.
يمكنك تجاهل السطر ، "GTKDialog تم تعيينه بدون أصل عابر. هذا محبط ".
GTK تعني GIMP Tool Kit ، وهي مجموعة الأدوات المستخدمة لتطوير واجهة جنوم. تم تصميمه في الأصل من قبل مؤلفي برنامج معالجة الصور GNU (GIMP). يرمز GNU إلى GNU's Not Unix.
يحذر محرك zenity
المؤلفين من أنهم استخدموا مكون GTK بطريقة غير قياسية.
الحصول على قيمة التاريخ
طباعة التاريخ على المحطة لا تفعل الكثير بالنسبة لنا. إذا أردنا استدعاء هذا التقويم من أحد البرامج النصية الخاصة بنا ، فنحن بحاجة إلى التقاط قيمة التاريخ المحددة حتى نتمكن من القيام بشيء مفيد معها في البرنامج النصي الخاص بنا. سنقوم أيضًا بتخصيص التقويم قليلاً.
سنستخدم الخيارات التالية مع التقويم. يجب استخدامها جميعًا مع علامة "-" المزدوجة:
- - نص : يحدد سلسلة نصية لعرضها في التقويم. إنه يحل محل الخيار الافتراضي ، "حدد تاريخًا من أدناه".
- - العنوان : يضبط عنوان نافذة حوار التقويم.
- –day : يضبط اليوم الذي يتم تحديده عند فتح التقويم.
- - شهر : يضبط الشهر الذي يتم تحديده عند فتح التقويم.
- - عام : يضبط السنة التي تم تحديدها عند فتح التقويم.
نحن نستخدم متغيرًا يسمى ChosenDate
لالتقاط التاريخ الذي يتم إرجاعه من التقويم. ونحن نستخدم echo $ChosenDate
لطباعة ذلك التاريخ في نافذة المحطة.
نعم ، لقد حققنا نفس النتيجة في المثال السابق ، ولكن هنا ، لدينا التاريخ المحدد المخزن في متغير. في المثال السابق تمت طباعته ونسيانه.
ChosenDate = $ (zenity - تقويم - نص "اختر تاريخًا" - العنوان "How-To Geek Rota" - اليوم الأول - الشهر التاسع - عام 2019) ؛ صدى $ ChosenDate
الآن ، يعرض التقويم موجهنا وعنوان نافذتنا. يتم تعيين التاريخ على تاريخ البدء الذي اخترناه بدلاً من تاريخ اليوم.
يمكننا أيضًا تخصيص تنسيق سلسلة التاريخ التي يتم إرجاعها عند إجراء التحديد. يجب أن يتبع خيار --date-format
format محدد تنسيق. هذه سلسلة من الرموز المميزة التي تحدد البيانات والتنسيقات التي سيتم تضمينها في الإخراج. الرموز المميزة هي نفسها المستخدمة مع وظيفة لغة strftime()
C وهناك مجموعة كبيرة منها.
الرموز التي نستخدمها هي:
- ٪ أ : الاسم الكامل ليوم الأسبوع.
- ٪ d : يوم الشهر كرقم.
- ٪ m : الشهر كرقم.
- ٪ y : السنة كرقمين (بدون قرن).
ChosenDate = $ (zenity - تقويم - نص "اختر تاريخًا" - العنوان "How-To Geek Rota" - تنسيق التاريخ = "٪ A٪ d /٪ m /٪ y" - اليوم الأول - الشهر التاسع - عام 2019) ؛ صدى $ ChosenDate
شخص ما يختار التاريخ:
ويتم إرجاع التاريخ باستخدام التنسيق الخاص بنا. يعرض اسم يوم الأسبوع ، متبوعًا بالتاريخ بالترتيب الأوروبي: اليوم والشهر والسنة.
نافذة حوار تحديد الملف: اختيار ملف
نوافذ حوار اختيار الملفات معقدة للغاية. يمكن للأشخاص تصفح نظام الملفات ، وتمييز ملف أو ملفات ، ثم النقر فوق "موافق" لتحديد تلك الملفات أو إلغاء التحديد تمامًا.
يوفر zenity
كل هذه الوظائف والمزيد. وهي سهلة الاستخدام مثل نافذة حوار التقويم.
الخيارات الجديدة التي سنستخدمها هي:
- - اختيار الملف: يخبرنا عن
zenity
في استخدام نافذة حوار اختيار ملف. - - متعدد : يسمح لشخص ما بتحديد أكثر من ملف.
- –مرشح الملفات: يخبر نافذة حوار الملفات بأنواع الملفات المراد عرضها.
zenity - تحديد الملف - مربع "How-To Geek" - متعدد - مرشح الملفات = '*. mm * .png * .page * .sh * .txt'
تعد نافذة حوار تحديد الملف وظيفية مثل أي نافذة أخرى لاختيار الملفات.
يمكن للمستخدم تصفح نظام الملفات واختيار الملف الذي تختاره.
لقد تصفحنا إلى دليل جديد وحددنا ملفًا يسمى "button_hybrid.png".
عند النقر فوق "موافق" ، يتم إغلاق نافذة حوار تحديد الملف ، ويتم طباعة اسم الملف والمسار في النافذة الطرفية.
إذا كنت بحاجة إلى استخدام اسم الملف في أي معالجة أخرى ، فيمكنك التقاطه في متغير ، تمامًا كما فعلت مع التاريخ من التقويم.
نافذة حوار تحديد الملف: حفظ ملف
إذا أضفنا خيارًا واحدًا ، فيمكننا تحويل نافذة حوار تحديد الملف إلى نافذة حوار حفظ الملف. الخيار - --save
. سنستخدم أيضًا خيار --confirm-overwrite
. هذا يطالب الشخص بتأكيد رغبته في الكتابة فوق ملف موجود.
الاستجابة = $ (zenity - file-select - save --confirm-overwrite) ؛ صدى $ Response
تظهر نافذة حوار حفظ الملف. لاحظ أن هناك حقل نصي حيث يمكن لأي شخص كتابة اسم ملف.
يمكن للمستخدم استعراض الموقع الذي يختاره داخل نظام الملفات ، أو توفير اسم للملف ، أو النقر فوق ملف موجود للكتابة فوقه.
في المثال أعلاه ، قام المستخدم بتمييز ملف موجود.
عندما ينقر على "موافق" ، تظهر نافذة حوار تأكيد تطلب منه تأكيد رغبته في استبدال الملف الحالي. لاحظ أن اسم الملف يظهر في مربع حوار التحذير. هذا هو نوع الاهتمام بالتفاصيل الذي يمنح zenity
مظهرها الاحترافي.
إذا لم نستخدم الخيار --confirm-overwrite
، فسيتم استبدال الملف بصمت.
يتم تخزين اسم الملف في المتغير Response
، والذي يطبع في نافذة المحطة الطرفية.
ويندوز حوار الإخطار
مع zenity
، بما في ذلك نوافذ حوار الإعلام البقعة في البرامج النصية الخاصة بك ، فهي سهلة. توجد نوافذ حوار للمخزون يمكنك الاتصال بها لتوفير المعلومات والتحذيرات ورسائل الخطأ والأسئلة للمستخدم.
لإنشاء نافذة حوار رسالة خطأ ، استخدم الأمر التالي:
zenity - error --width 300 --text "تم رفض الإذن. لا يمكن الكتابة إلى الملف."
الخيارات الجديدة التي نستخدمها هي:
- - خطأ : يخبرنا عن
zenity
أننا نريد استخدام نافذة حوار خطأ. - - العرض : يضبط العرض الأولي للنافذة.
تظهر نافذة حوار الخطأ بالعرض المحدد. يستخدم رمز خطأ GTK القياسي.
لإنشاء نافذة حوار معلومات ، استخدم الأمر التالي:
zenity --info --width 300 - نص "اكتمل التحديث. انقر فوق" موافق "للمتابعة.
الخيار الجديد الذي نستخدمه هو --info
، والذي يخبر zenity
بإنشاء نافذة حوار معلومات.
لإنشاء نافذة حوار سؤال ، استخدم الأمر التالي:
zenity - سؤال - عرض 300 - نص "هل أنت سعيد بالمتابعة؟" ؛ صدى $؟
الخيار الجديد الذي نستخدمه هو --question
، الذي يخبر zenity
لإنشاء نافذة حوار للأسئلة.
$?
هي معلمة خاصة. يحتفظ بقيمة الإرجاع من أحدث خط أنابيب تم تنفيذه مؤخرًا. بشكل عام ، هذه هي القيمة من أحدث عملية تم إغلاقها. تعني القيمة الصفرية "حسنًا" ، وتعني القيمة بواحد أو أكثر "إلغاء".
هذه تقنية عامة يمكنك تطبيقها على أي من نوافذ حوار zenity
. بالتحقق من هذه القيمة في البرنامج النصي الخاص بك ، يمكنك تحديد ما إذا كان يجب معالجة البيانات التي يتم إرجاعها من نافذة الحوار أو تجاهلها.
نقرنا على "نعم" ، وبالتالي فإن رمز الإرجاع هو صفر يشير إلى "موافق".
لإنشاء نافذة حوار تحذير ، استخدم الأمر التالي:
zenity - تحذير - العنوان "مساحة محرك أقراص ثابتة منخفضة" - عرض 300 - نص "قد لا توجد مساحة كافية على محرك الأقراص الثابتة لحفظ النسخة الاحتياطية."
الخيار الجديد الذي نستخدمه هو - warning ، والذي يخبر --warning
zenity
نافذة حوار تحذير.
تظهر نافذة حوار التحذير. إنه ليس سؤالاً ، لذا فهو يحتوي على زر واحد فقط.
نافذة حوار التقدم
يمكنك استخدام نافذة حوار تقدم zenity
لعرض شريط التقدم الذي يشير إلى مدى قرب اكتمال النص البرمجي.
يتم تقديم شريط التقدم وفقًا للقيم التي يتم إدخالها فيه من البرنامج النصي الخاص بك. لتوضيح المبدأ ، استخدم الأمر التالي:
(بالنسبة إلى i في $ (seq 0 10 100) ؛ قم بعمل echo $ i ؛ النوم 1 ؛ تم)
ينهار الأمر على النحو التالي:
- يخطو الأمر
seq
خلال تسلسل من 0 إلى 100 ، في خطوات 10. - في كل خطوة ، يتم تخزين القيمة في المتغير
i
. هذا يطبع في نافذة المحطة. - يتوقف الأمر مؤقتًا لمدة ثانية واحدة ، بسبب أمر
sleep 1
.
يمكننا استخدام هذا مع نافذة حوار تقدم zenity
لإظهار شريط التقدم. لاحظ أننا نقوم بتحويل إخراج الأمر السابق إلى zenity:
(بالنسبة إلى i في $ (seq 0 10 100) ؛ قم بعمل echo $ i ؛ النوم 1 ؛ تم التنفيذ) | zenity - التقدم - العنوان "How-To Geek" - الإغلاق التلقائي
الخيارات الجديدة التي نستخدمها هي:
- - التقدم : يخبرنا عن
zenity
في استخدام نافذة حوار التقدم. - - الإغلاق التلقائي: يغلق مربع الحوار عندما يصل شريط التقدم إلى 100 بالمائة.
تظهر نافذة حوار التقدم ، ويتقدم الشريط نحو 100 بالمائة ، ويتوقف مؤقتًا لمدة ثانية واحدة بين كل خطوة.
يمكننا استخدام هذا المفهوم لقيم الأنابيب في zenity
لتضمين نافذة حوار التقدم في البرنامج النصي.
أدخل هذا النص في محرر واحفظه باسم "progress.sh."
! / بن / باش قائمة عمل الوظيفة () { صدى "# عنصر العمل الأول" صدى "25" النوم 1 صدى "# عنصر العمل الثاني" صدى "50" النوم 1 صدى "# عنصر العمل الثالث" صدى "75" النوم 1 صدى "# آخر عنصر عمل" صدى "100" النوم 1 } قائمة العمل | اللذة - التقدم - العنوان "How-To Geek" - إغلاق تلقائي خروج 0
فيما يلي تفصيل للبرنامج النصي:
- يحدد البرنامج النصي وظيفة تسمى
work-list
. هذا هو المكان الذي تضع فيه أوامرك وإرشاداتك لأداء عمل حقيقي. استبدل كل أوامرsleep 1
بأوامر حقيقية. - يقبل
zenity
خطوطecho "# ..."
ويعرضها في نافذة حوار التقدم. قم بتغيير نص هذه السطور ، بحيث تمرر رسائل إعلامية إلى المستخدم. - يتم أيضًا قبول خطوط
echo
التي تحتوي على أرقام ، مثلecho "25"
، من خلالzenity
وتعيين قيمة شريط التقدم. - يتم استدعاء وظيفة قائمة العمل وتوجيهها في
zenity
.
استخدم هذا الأمر لجعل البرنامج النصي قابلاً للتنفيذ:
chmod + x progress.sh
استخدم هذا الأمر لتشغيل البرنامج النصي:
./progress.sh
يعمل البرنامج النصي وتتغير الرسالة النصية مع تنفيذ كل مرحلة من مراحل البرنامج النصي. يتحرك شريط التقدم بخطوات نحو 100 بالمائة.
نافذة حوار المقياس
تتيح نافذة حوار المقياس لشخص ما تحريك شريط التمرير لاختيار قيمة رقمية. هذا يعني أنه لا يمكنها إدخال قيمة مرتفعة جدًا أو منخفضة جدًا.
الخيارات الجديدة التي نستخدمها هي:
- –المقياس : يخبرنا عن
zenity
أننا نريد استخدام نافذة حوار مقياس. - –min-value : يعيّن الحد الأدنى لقيمة المقياس.
- –max-value : يعيّن الحد الأقصى لقيمة المقياس.
- –step : يضبط المقدار الذي يتحرك فيه شريط التمرير عند استخدام مفاتيح الأسهم. لا يؤثر هذا على حركات شريط التمرير إذا استخدم شخص ما الماوس.
- –value : يضبط القيمة الأولية وموضع شريط التمرير.
هذا هو الأمر الذي نستخدمه:
الاستجابة = $ (zenity --scale --title "How-To Geek" --text "حدد التكبير." - min-value = 0 - max-value = 30 --step = 3 --value15) ؛ صدى $ Response
تظهر نافذة حوار شريط التمرير مع ضبط شريط التمرير على 15.
يمكن للمستخدم تحريك شريط التمرير لتحديد قيمة جديدة.
عندما تنقر على "موافق" ، يتم نقل القيمة إلى Response
المتغيرة وتتم طباعتها في النافذة الطرفية.
نافذة حوار الدخول
تسمح نافذة حوار الإدخال لشخص ما بإدخال نص.
الخيارات الجديدة التي نستخدمها هي:
- - الإدخال : يخبرنا عن
zenity
أننا نريد استخدام نافذة حوار إدخال. - - نص الإدخال : يمكنك استخدام هذا إذا كنت تريد كتابة قيمة مقترحة في حقل إدخال النص. نحن نستخدم "" لفرض حقل فارغ. هذا ليس مطلوبًا تمامًا ، لكننا أردنا توثيق الخيار.
يبدو الأمر الكامل كما يلي:
الاستجابة = $ (zenity --entry --text "أدخل مصطلح البحث" - العنوان "Howe-To Geek" --entry-text = "") ؛ صدى $ Response
تظهر نافذة حوار بسيطة تحتوي على حقل إدخال نص.
يمكن لأي شخص كتابة النص وتحريره.
عندما ينقر على "موافق" ، يتم تعيين القيمة التي كتبها إلى المتغير Response. نستخدم echo لطباعة قيمة المتغير في النافذة الطرفية.
ضع كل شيء معا
دعونا نجمع هذه التقنيات معًا وننشئ نصًا وظيفيًا. سيقوم البرنامج النصي بإجراء فحص لمعلومات الأجهزة وتقديم النتائج للمستخدم في نافذة نصية قابلة للتمرير. يمكنها اختيار نوع الفحص الطويل أو القصير.
بالنسبة لهذا البرنامج النصي ، سنستخدم ثلاثة أنواع من نوافذ الحوار ، اثنان منها جديدان بالنسبة لنا:
- الأول هو قائمة نافذة الحوار. يسمح لشخص ما بالاختيار.
- والثاني عبارة عن نافذة حوار تقدم تتيح للمستخدم معرفة أن شيئًا ما يحدث ، وعليها الانتظار.
- والثالث عبارة عن نافذة معلومات نصية تعرض النتائج للمستخدم.
أدخل هذا النص في محرر واحفظه باسم "Hardware-info.sh".
#! / بن / باش # عرض قائمة الأجهزة لهذا الكمبيوتر TempFile = $ (mktemp) نوع القائمة = `السماوية - العرض = 400 - الارتفاع = 275 - قائمة - راديولست \ - عنوان "فحص الأجهزة" \ - نص "حدد نوع الفحص:" - عمود "تحديد" \ - العمود 'Scan Type' TRUE "Short" FALSE "Long" ` إذا [[$؟ - مكافئ 1]] ؛ ومن بعد # ضغطوا على إلغاء أو أغلقوا نافذة الحوار zenity --error --title = "رفض المسح الضوئي" - العرض = 200 \ --text = "تم تخطي فحص الأجهزة" مخرج 1 elif [$ ListType == "قصير"] ؛ ومن بعد # اختاروا زر الاختيار القصير العلم = "- قصير" آخر # اختاروا زر الاختيار الطويل علم = "" فاي # البحث عن معلومات الأجهزة بالقيمة المناسبة في $ Flag hwinfo $ Flag | نقطة الإنطلاق> (السماوية - العرض = 200 - الارتفاع = 100 \ - العنوان = "تجميع المعلومات" - التقدم \ --pulsate --text = "جارٍ فحص الأجهزة ..." \ - قتل تلقائي - إغلاق تلقائي)> $ {TempFile} # عرض معلومات الأجهزة في نافذة التمرير الارتفاع - العرض = 800 - الارتفاع = 600 \ - العنوان "تفاصيل الجهاز" \ --text-info --filename = "$ {TempFile}" خروج 0
استخدم هذا الأمر لجعله قابلاً للتنفيذ:
chmod + x Hardware-info.sh
ينشئ هذا البرنامج النصي ملفًا مؤقتًا ، ويتم الاحتفاظ باسم الملف في متغير TempFile:
TempFile = $ (mktemp)
يستخدم البرنامج النصي خيار --list
لإنشاء نافذة حوار zenity
تسمى نافذة حوار list. تخبر الأحرف "\" في نهاية السطور البرنامج النصي أن يعاملهم كسطر واحد طويل يلتف حوله. ها هي العملية:
- نحدد عرض وارتفاع النافذة.
- تدعم نافذة حوار القائمة الأعمدة. يتسبب الخيار -
--radiolist
في أن يكون العمود الأول عمودًا من أزرار الاختيار. - قمنا بتعيين عنوان وموجه نصي للنافذة.
- قمنا بتعيين عنوان العمود الأول ليكون "تحديد". سيكون محتوى هذا العمود هو أزرار الاختيار.
- قمنا بتعيين عنوان العمود الثاني ليكون "تحديد" ، ونقدم محتوى العمود الثاني. يحتوي هذا العمود على تصنيفين نصيين: "قصير" و "طويل". تعني المؤشرات TRUE و FALSE أن الخيار "Short" محدد بشكل افتراضي عند ظهور نافذة الحوار.
- نقوم بتخزين النتيجة من نافذة الحوار هذه في متغير يسمى
ListType
.
نوع القائمة = `السماوية - العرض = 400 - الارتفاع = 275 - قائمة - راديولست \ - عنوان "فحص الأجهزة" \ - نص "حدد نوع الفحص:" - عمود "تحديد" \ - العمود 'Scan Type' TRUE "Short" FALSE "Long" `
إذا ضغط المستخدم على "إلغاء" ، فلن نحتاج إلى التحقق من القيمة في ListType,
يمكننا ببساطة الخروج. إذا ضغط على "موافق" ، نحتاج إلى معرفة ما إذا كان قد حدد زر الاختيار "قصير" أو "طويل":
- المعلمة الخاصة
$?
يساوي صفرًا إذا ضغط المستخدم على "موافق". يساوي واحدًا إذا ضغط على "إلغاء" أو أغلق النافذة. - إذا كان يساوي واحدًا ، يعرض البرنامج النصي نافذة حوار معلومات الخطأ ويخرج. إذا ضغط على "موافق" ، ننتقل إلى اختبار القيمة في متغير
ListType
. - إذا احتفظ متغير
ListType
بالقيمة "Short" ، يقوم البرنامج النصي بتعيين متغير يسمىFlag
يساوي "–short". - إذا كان متغير
ListType
لا يحتوي على القيمة "Short" ، فيجب أن يحتفظ بالقيمة "Long". يقوم البرنامج النصي بتعيين متغير يسمىFlag
يساوي "" ، وهو عبارة عن سلسلة فارغة. - يستخدم البرنامج النصي متغير
Flag
في القسم التالي.
إذا [[$؟ - مكافئ 1]] ؛ ومن بعد # ضغطوا على إلغاء أو أغلقوا نافذة الحوار zenity --error --title = "رفض المسح الضوئي" - العرض = 200 \ - نص = "تم تخطي فحص الجهاز" مخرج 1 elif [$ ListType == "قصير"] ؛ ومن بعد # اختاروا زر الاختيار القصير العلم = "- قصير" آخر # اختاروا زر الاختيار الطويل علم = "" فاي
الآن بعد أن عرف البرنامج النصي نوع الفحص الذي يريده المستخدم ، يمكننا إجراء فحص لمعلومات الأجهزة:
- يستدعي البرنامج النصي الأمر
hwinfo
بالقيمة الموجودة في متغيرFlag
. - إذا احتوى
Flag
على "–short" ، يقوم أمرhwinfo
بإجراء مسح قصير. إذا كانت قيمةFlag
هي "" ، فلن يمر أي شيء إلىhwinfo
ويتم إجراء مسح افتراضي طويل. - يقوم البرنامج النصي بإخراج الإخراج من
hwinfo
إلىtee
. يرسلtee
الإخراج إلىzenity
وTempFile
. - يقوم البرنامج النصي بإنشاء نافذة حوار شريط التقدم. يحدد عرض وارتفاع نافذة الحوار والعنوان ونصوص المطالبة.
- لا يستطيع البرنامج النصي معرفة مقدار المعلومات التي
hwinfo
أمر hwinfo مسبقًا ، لذلك لا يمكنه تعيين شريط التقدم للتقدم بشكل صحيح إلى 100 بالمائة. يؤدي الخيار--pulsate
إلى عرض مربع حوار التقدم مؤشرًا متحركًا. يقوم هذا بإعلام المستخدم بحدوث شيء وعليه الانتظار. - ينهي خيار
--auto-kill
النص البرمجي إذا نقر أحد الأشخاص على "إلغاء". - يؤدي خيار الإغلاق التلقائي
--auto-close
إلى إغلاق مربع حوار التقدم تلقائيًا عند اكتمال العملية التي يراقبها.
# البحث عن معلومات الأجهزة بالقيمة المناسبة في $ Flag hwinfo $ Flag | نقطة الإنطلاق> (السماوية - العرض = 200 - الارتفاع = 100 \ - العنوان = "تجميع المعلومات" - التقدم \ --pulsate --text = "جارٍ فحص الأجهزة ..." \ - قتل تلقائي - إغلاق تلقائي)> $ {TempFile}
عند اكتمال فحص hwinfo
، يستدعي البرنامج النصي zenity
لإنشاء نافذة حوار معلومات نصية باستخدام الخيار --text-info
. تعرض نافذة حوار معلومات النص محتويات ملف TempFile
:
- يقوم البرنامج النصي بتعيين عرض وارتفاع نافذة الحوار ونص العنوان.
- يُستخدم الخيار
--flename
لقراءة محتويات الملف المحتفظ به في متغيرTempFIle
.
# عرض معلومات الأجهزة في نافذة التمرير الارتفاع - العرض = 800 - الارتفاع = 600 \ - العنوان "تفاصيل الجهاز" \ --text-info --filename = "$ {TempFile}"
عندما يغلق المستخدم نافذة حوار معلومات النص ، يخرج البرنامج النصي.
خروج 0
دعنا نطلقها ونلقي نظرة.
./hardware-info.sh
يظهر مربع القائمة. يتم تحديد الخيار "قصير" افتراضيًا.
دعنا نختار "طويل" ، ثم انقر على "موافق".
تظهر نافذة التقدم مع مؤشر انزلاق. يبقى على الشاشة حتى اكتمال فحص الأجهزة.
عند اكتمال فحص الجهاز ، تظهر نافذة حوار المعلومات النصية مع تفاصيل من الفحص.
انقر فوق موافق."
حتى الفارس المتشدد في سطر الأوامر يجب أن يعترف بوجود زوج من نوافذ حوارات واجهة المستخدم الرسومية يمكن أن يضفي لمسة احترافية على نص Bash النصي المتواضع.