صفر و یک - برنامه نویسی - لینوکس

دست نوشته های شخصی من در مورد نرم افزار، سیستم عامل و برنامه نویسی لینوکس

صفر و یک - برنامه نویسی - لینوکس

دست نوشته های شخصی من در مورد نرم افزار، سیستم عامل و برنامه نویسی لینوکس

لیدورا یک وبلاگ تخصصی برنامه نویسی یا لینوکس نیست. بیشتر محلیه برای ثبت چیزهایی که قراره بیشتر از یه بار خونده بشن. اگه به درد شما هم خورد که زکات دانش ما پرداخت شده، شکر.

آخرین نظرات

  • ۱۰ بهمن ۹۵، ۰۲:۴۲ - Black Riders
    عالی

نویسندگان

 

توی قسمت اول این مطلب با ساختن دیالوگ‌های msgbox, yes/no و input box آشنا شدیم و دیدیم که چطور می‌شه از دیالوگ‌ها توی اسکریپت‌ها استفاده کرد. این قسمت اختصاص داره به دیالوگ Menu box که یکی از دیالوگ‌های پرکاربرد و مهم دستور dialog هست و با استفاده از اون می‌شه به اسکریپت ظاهری حرفه‌ای تر داد.

 

این اسکریپت رو ببینید.

#!/bin/bash
# utilitymenu.sh - A sample shell script to display menus on screen
# Store menu options selected by the user
INPUT=/tmp/menu.sh.$$
 
# Storage file for displaying cal and date command output
OUTPUT=/tmp/output.sh.$$
 
# get text editor or fall back to vi_editor
vi_editor=${EDITOR-vi}
 
# trap and delete temp files
trap "rm $OUTPUT; rm $INPUT; exit" SIGHUP SIGINT SIGTERM
 
#
# Purpose - display output using msgbox 
#  $1 -> set msgbox height
#  $2 -> set msgbox width
#  $3 -> set msgbox title
#
function display_output(){
	local h=${1-10}			# box height default 10
	local w=${2-41} 		# box width default 41
	local t=${3-Output} 	# box title 
	dialog --backtitle "Linux Shell Script Tutorial" --title "${t}" --clear --msgbox "$(<$OUTPUT)" ${h} ${w}
}
#
# Purpose - display current system date & time
#
function show_date(){
	echo "Today is $(date) @ $(hostname -f)." >$OUTPUT
    display_output 6 60 "Date and Time"
}
#
# Purpose - display a calendar
#
function show_calendar(){
	cal >$OUTPUT
	display_output 13 25 "Calendar"
}
#
# set infinite loop
#
while true
do
 
### display main menu ###
dialog --clear  --help-button --backtitle "Linux Shell Script Tutorial" \
--title "[ M A I N - M E N U ]" \
--menu "You can use the UP/DOWN arrow keys, the first \n\
letter of the choice as a hot key, or the \n\
number keys 1-9 to choose an option.\n\
Choose the TASK" 15 50 4 \
Date/time "Displays date and time" \
Calendar "Displays a calendar" \
Editor "Start a text editor" \
Exit "Exit to the shell" 2>"${INPUT}"
 
menuitem=$(<"${INPUT}")
 
 
# make decsion 
case $menuitem in
	Date/time) show_date;;
	Calendar) show_calendar;;
	Editor) $vi_editor;;
	Exit) echo "Bye"; break;;
esac
 
done
 
# if temp files found, delete em
[ -f $OUTPUT ] && rm $OUTPUT
[ -f $INPUT ] && rm $INPUT

Menu box

 

منو‌های menu box رو این طوری تعریف کنید.

Date/time "Displays date and time" \
Calendar "Displays a calendar" \
Editor "Start a text editor" \
Exit "Exit to the shell" 

اول اسم منو و بعد هم توضیح اینکه چی‌کار می‌کنه. بعضی ها هم این طوری تعریفش می‌کنن.

 

1 "Displays date and time" \
2 "Displays a calendar" \
3 "Start a text editor" \
4 "Exit to the shell" 

 

با اضافه کردن help-button-- دکمه‌ی help به دیالوگ اضافه می‌شه.

انتخاب کاربر رو pipe می‌کنیم توی متغیر INPUT

Exit "Exit to the shell" 2>"${INPUT}"

 

و با یه case بنا به انتخاب کاربر یه کاری رو انجام میدیم.

menuitem=$(<"${INPUT}")
 
 
# make decsion 
case $menuitem in
	Date/time) show_date;;
	Calendar) show_calendar;;
	Editor) $vi_editor;;
	Exit) echo "Bye"; break;;
esac

 

فرم کلی نمایش منو باکس با dialog این شکلیه.

dialog --menu <text> <height> <width>
<menu-height> [<tag><item>]

 

این هم یه مثال ساده:

% dialog --menu "Choose one:" 10 30 3 1 red 2 green 3 blue

 

همه چیز رو در مورد menu box دیدیم. در پست‌های بعدی با اجزای دیگه‌ای مثل Progress bar آشنا می‌شیم.

 

پست‌های مرتبط:

نمایش کادرهای محاوره‌ای در Bash - قسمت اول

نمایش کادرهای محاوره‌ای در Bash - قسمت سوم

 

منبع : +


 

 

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی