نمایش کادرهای محاورهای در Bash - قسمت سوم (آخر)
اگه دو قسمت قبل(+ +) این سری مطالب رو خونده باشید تا حالا با استفادهی دیالوگهایی مثل Menubox, msgbox, yes/no و input box توی اسکریپتهاتون آشنا شدید. همونطور که دیدید دستور dialog میتونه به اسکریپت شما یه محیط زیبا و کاربرپسند بده و همینطور با نشون دادن دیالوگهای مختلف به کاربر استفاده از اسکریپت رو سادهتر کنه. در قسمت آخر با بقیهی دیالوگهای این دستور آشنا میشیم.
progress bar یکی دیگه از دیالوگهای پرکاربرده که این برنامه در اختیارتون قرار میده.
این دستور رو ببینید:
echo "50" | dialog --gauge "Please wait" 10 70 0
همونطور که میبینید فرم کلی ساخت progress bar به این صورته:
dialog --gauge "text" height width percent
این هم یه اسکریپت نمونه:
#!/bin/bash
# dvdcopy.sh - A sample shell script to display a progress bar
# set counter to 0
counter=0
(
# set infinite while loop
while :
do
cat <<EOF
XXX
$counter
Disk copy /dev/dvd to /home/data ( $counter%):
XXX
EOF
# increase counter by 10
(( counter+=10 ))
[ $counter -eq 100 ] && break
# delay it a specified amount of time i.e 1 sec
sleep 1
done
) |
dialog --title "File Copy" --gauge "Please wait" 7 70 0
دیالوگ بعدی selection box یا fselect یا همون انتخاب فایل خودمونه. این طوری میتونیم به کاربر اجازه بدیم که مثلا یه فایل رو برای ویرایش باز کنه.
این اسکریپت رو ببینید:
#!/bin/bash
# deletefile.sh - Remove the file using dialog box
# -------------------------------------------------
# purpose - remove file
# $1 - filename
function delete_file(){
local f="$1"
local m="$0: file $f failed to delete."
if [ -f $f ]
then
/bin/rm $FILE && m="$0: $f file deleted."
else
m="$0: $f is not a file."
fi
dialog --title "Remove file" --clear --msgbox "$m" 10 50
}
# select filename using dialog
# store it to $FILE
FILE=$(dialog --title "Delete a file" --stdout --title "Please choose a file to delete" --fselect /tmp/ 14 48)
# delete file
[ ! -z $FILE ] && delete_file "$FILE"
خروجی شبیه به این تصاویر میشه
فرمت کلی fselect این شکلیه:
dialog --title "text" --fselect /path/to/dir height width
FILE=$(dialog --stdout --title "Please choose a file" --fselect $HOME/ 14 48)
echo "${FILE} file chosen."
نوبت میرسه به form dialog یا input dialog. از این دیالوگ برای گرفتن مقادیر از کاربر استفاده کنید. فرمت کلی form dialog این شکلیه:
dialog --form text height width formheight [ label y x item y x flen ilen ]
طول ورودی رو با ilen و اندازه فیلد ورودی رو با flen جایگزین کنید.
برای نمونه این اسکریپت رو ببینید:
#!/bin/bash
# useradd1.sh - A simple shell script to display the form dialog on screen
# set field names i.e. shell variables
shell=""
groups=""
user=""
home=""
# open fd
exec 3>&1
# Store data to $VALUES variable
VALUES=$(dialog --ok-label "Submit" \
--backtitle "Linux User Managment" \
--title "Useradd" \
--form "Create a new user" \
15 50 0 \
"Username:" 1 1 "$user" 1 10 10 0 \
"Shell:" 2 1 "$shell" 2 10 15 0 \
"Group:" 3 1 "$groups" 3 10 8 0 \
"HOME:" 4 1 "$home" 4 10 40 0 \
2>&1 1>&3)
# close fd
exec 3>&-
# display values just entered
echo "$VALUES"
این هم خروجیش:
توی دیالوگها از check list ها هم میشه استفاده کرد. این کد رو تست کنید:
% dialog --checklist "Choose toppings:" 10 40 3 \
1 Cheese on \
2 "Tomato Sauce" on \
3 Anchovies off
on و off بودن مشخص میکنه که پیشفرض کدوم گزینه ها مارک شده باشن و کدوم نه.
و در آخر از radio list ها هم میتونید استفاده کنید:
% dialog --backtitle "CPU Selection" \
--radiolist "Select CPU type:" 10 40 4 \
1 386SX off \
2 386DX on \
3 486SX off \
4 486DX off
امیدوارم که آشنایی با dialog براتون مفید واقع بشه.
پستهای مرتبط:
نمایش کادرهای محاورهای در Bash - قسمت اول
نمایش کادرهای محاورهای در Bash - قسمت دوم
منبع : +
رفتم تو فکر اینکه بشینم یه اسکریپت با دیالوگ واسه کار با cron بنویسم :)