نمایش کادرهای محاورهای در Bash - قسمت دوم
توی قسمت اول این مطلب با ساختن دیالوگهای 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 رو این طوری تعریف کنید.
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 دیدیم. در پستهای بعدی با اجزای دیگهای مثل
پستهای مرتبط:
نمایش کادرهای محاورهای در Bash - قسمت اول
نمایش کادرهای محاورهای در Bash - قسمت سوم
منبع : +