资讯专栏INFORMATION COLUMN

Linux_《Linux命令行与shell脚本编程大全》第十八章学习总结

liaoyg8023 / 2195人阅读

摘要:命令行与脚本编程大全第三版第十八章学习总结第十八章图形化桌面环境中的脚本编程本章内容创建文本菜单创建文本窗口部件添加图形创建文本菜单创建交互式脚本最常用的方法是使用菜单,脚本菜单的核心是命令,命令会根据用户在菜单上的选择来执行特定命令。

时间:2017年12月04日星期一
说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十八章学习总结

第十八章:图形化桌面环境中的脚本编程

本章内容

创建文本菜单

创建文本窗口部件

添加X Window图形

18.1 创建文本菜单

创建交互式shell脚本最常用的方法是使用菜单,shell脚本菜单的核心是case命令,case命令会根据用户在菜单上的选择来执行特定命令。

18.1.1 创建菜单布局

常用命令

clear

清理出现在屏幕上的文本

echo -e

在echo命令中输出格式化的字符串,方便菜单项布局

echo -en

输出指定格式化字符串,但不会换行,光标在末尾等待用户输入

read -n 1

使用read命令-n选项来限制自读取一个字符

简单示例

clear
echo
echo -e "			Sys Admin Menu
"
echo -e "	1. Display disk space"
echo -e "	2. Display logged on users"
echo -e "	3. Display memory usage"
echo -e "	4. Exit menu

"
echo -en "		Enter option: "

read -n 1 option
18.1.2 创建菜单函数

shell脚本菜单选项作为一组独立的函数实现起来更为容易

为每个菜单选项创建独立的shell函数

通过会为还没有实现的函数先创建一个桩函数

将菜单布局本身作为一个函数来创建

简单示例

function diskspace {
    clear
    echo "This is where the diskspace commands will go"
}

function menu {
    clear
    echo
    echo -e "			Sys Admin Menu
"
    echo -e "	1. Display disk space"
    echo -e "	2. Display logged on users"
    echo -e "	3. Display memory usage"
    echo -e "	4. Exit menu

"
    echo -en "		Enter option: "
    read -n 1 option
}
18.1.3 添加菜单逻辑

创建程序逻辑将菜单布局和函数结合起来

case命令根据菜单中输入的字符来调用相应的函数

使用星号(*)来处理所有不正确的菜单项

简单示例

menu
case $option in
0)
    break ;;
1)
    diskspace ;;
2)
    whoseon ;;
3)
    memusage ;;
*)
    clear
    echo "Sorry, wrong selection";;
esac

18.1.4 整合shell脚本菜单

完整例子

编写menu1脚本

#!/bin/bash

function diskspace {
    clear
    df -k
}

function whoseon {
    clear
    who
}

function memusagee {
    clear
    cat /proc/meminfo
}

function menu {
    clear
    echo
    echo -e "			Sys Admin Menu
"
    echo -e "	1. Display disk space"
    echo -e "	2. Display logged on users"
    echo -e "	3. Display memory usage"
    echo -e "	0. Exit menu

"
    echo -en "		Enter option: "
    read -n 1 option
}

while [ 1 ]
do
    menu
    case $option in
    0)
       break ;;
    1)
       diskspace ;;
    2)
       whoseon ;;
    3)
       memusage ;;
    *)
       clear
       echo "Sorry, wrong selection";;
    esac
    echo -en "

			Hit any key to continue"
    read -n 1 line
done
clear
18.1.5 使用select命令

命令格式:

select variable in list
do
    commands
done

命令说明:

list参数是由空格分割的文本选项列表,这些列表构成了整个菜单

select命令获取输入的答案并自动处理

编写smenu1脚本

#!/bin/bash

function diskspace {
    clear
    df -k
}

function whoseon {
    clear
    who
}

function memusagee {
    clear
    cat /proc/meminfo
}

PS3="Enter option: "
select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"
do
    case $option in
    "Exit program")
        break ;;
    "Display disk space")
        diskspace ;;
    "Display logged on users")
        whoseon ;;
    "Display memory usage")
        memusage ;;
    *)
        clear
        echo "Sorry, wrong selection" ;;
    esac
done
clear
18.2 制作窗口 18.2.1 dialog包

dialog命令使用命令行参数来决定生成哪种窗口部件

安装dialog包以及需要的库

sudo apt-get install dialog

dialog部件

部件:描述

calendar:提供选择日期的日历

checklist:显示多个选项(其中每个选项都能打开或关闭)

form:构建一个带有标签以及文本字段(可以填写内容)的表单

fselect:提供一个文件选择窗口来浏览选择文件

guage:显示完成的百分比进度条

infobox:显示一条消息,但不用等待回应

inputbox:提供一个输入文本用的文本表单

inputmenu:提供一个可编辑的菜单

menu:显示可选择的一系列选项

msgbox:显示一条消息,并要求用户选择ok按钮

pause:显示一个进度条来显示暂定期间的状态

passwordbox:显示一个文本框,但会隐藏输入的文本

passwordform:显示一个带标签和隐藏稳定字段的表单

radiolist:提供一组菜单选项,但只能选择其中一个

tailbox:用tail命令在滚动窗口中显示文件的内容

tailboxbg:跟 tailbox一样,但是在后台模式中运行

textbox:在滚动窗口中显示文件的内容

timebox:提供一个选择小时、分钟和秒数的窗口

yesno:提供一个带有Yes和No按钮的简单消息

使用格式

dialog –widget parameters

1.msgbox部件

使用说明

dialog –title Testing –msgbox text height width

text参数是在窗口中显示的字符串

dialog命令会根据height和width参数创建的窗口大小来自动换行

title参数指定窗口的标题

实例

dialog --title Testing --msgbox "This is a test" 10 20

2.yesno部件

使用说明

yesno部件允许用户对窗口中显示的问题选择yes或no

用户选择了No按钮,退出状态码是1;如果选择了Yes按钮,退出状态码就是0

实例

dialog --title "Please answer" --yesno "Is this thing on?" 10 20

3.inputbox部件

使用说明

inputbox提供一个简单的文本框区域来输入文本字符串

dialog命令会将文本字符串的值发给STDERR,通过重定向STDERR来获取用户输入

用户选择了OK按钮,退出状态码是0;反之,退出状态码就是1

实例

dialog --inputbox "Enter your age: " 10 20 2>age.txt

4.textbox部件

使用说明

textbox部件在窗口中显示大量信息

实例

dialog --textbox /etc/passwd 15 45

5.menu部件

使用说明

menu部件用来创建文本菜单的窗口版本

dialog命令会将选定的菜单项文本发送到STDERR,通过重定向STDERR来获取选择

实例

dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>test.txt

6.fselect部件

使用说明

使用fselect部件来浏览文件的位置并选择文件

实例

dialog --title "Select a file" --fselect $HOME/ 10 50 2>file.txt
18.2.2 dialog选项

dialog命令有很多不同的选项

--title选项可以设置窗口顶部的标题

--backlist选项可以为脚本中的菜单创建公共标题

还有其它许多选项,此处省略

18.2.3 在脚本中使用dialog命令

如果要在脚本中使用dialog命令,则必须遵守以下规范

如果有Cancel或No按钮,检查dialog命令的退出状态码

通过重定向STDERR来获取输出值

使用dialog部件来创建系统管理菜单

编写menu3脚本

#!/bin/bash

temp1=$(mktemp -t test1.XXXXXX)
temp2=$(mktemp -t test2.XXXXXX)

function diskspace {
    dialog --textbox $temp1 20 60
}

function whoseon {
    who > $temp1
    dialog --textbox $temp1 20 50
}

function memusage {
    cat /proc/meminfo > $temp1
    dialog --textbox $temp1 20 50
}

while [ 1 ]
do
    dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2
    if [ $? -eq 1 ]
    then
        break
    fi

    selection=$(cat $temp2)

    case $selection in
    1)
        diskspace ;;
    2)
        whoseon ;;
    3)
        memusage ;;
    0)
        break ;;
    *)
        dialog --msgbox "Sorry, invalid selection" 10 30
    esac
done

rm -f $temp1 2> /dev/null
rm -f $temp2 2> /dev/null
18.3 使用图形 18.3.1 KDE环境

KDE图形化环境默认包含kdialog包

kdialog包使用kdialog命令在KDE桌面上生成类似于dialog式部件的标准窗口

需要检查系统是否已安装kdialog包

1.kdialog部件

使用说明

格式:

kdialog display-options window-options arguments

window-options选项指定使用哪种类型的窗口部件

实例:

kdialog --checklist "Items I need" 1 "Toothbrush" on 2 "Toothpaste" off 3 "Hair brush" on 4 "Deodorant" off 5 "Slippers" off

kdialog窗口选项

选项:描述

--checklist title [tag item status]:带有状态的多选列表菜单,可以表面选项是否被选定

--error text:错误消息框

--inputbox text [init]:输入文本框。可以用init值来制定默认值

--menu title [tag item]:带有标题的菜单选择框,以及用tag标识的选项列表

--msgbox text:显示指定文本的简单消息框

--password text:隐藏用户输入的密码输入文本框

--radiolist title [tag item status]:带有状态的单选列表菜单,可以表面选项是否被选定

--separate-output:为多选列表和单选列表菜单返回按行分开的选项

--sorry text:“对不起”消息框

--textbox file [width] [height]:显示file的内容的文本框,可以指定width和height

--title title:为对话窗口的TitleBar区域指定一个标题

--warningyesno text:带有Yes和No按钮的警告消息框

--warningcontinuecancel text:带有Continue和Cancel按钮的警告消息框

--warningyesnocancel text:带有Yes、No和Cancel按钮的警告消息框

--yesno text:带有Yes和No按钮的提问框

--yesnocancel text:带有Yes、No和Cancel按钮的提问框

2.使用kdialog

使用kdialog创建系统管理菜单

编写menu4脚本

#!/bin/bash

temp1=$(mktemp -t test1.XXXXXX)
temp2=$(mktemp -t test2.XXXXXX)

function diskspace {
    df -k > $temp1
    kdialog --textbox $temp1 1000 10
}

function whoseon {
    who > $temp1
    kdialog --textbox $temp1 500 10
}

function memusage {
    cat /proc/meminfo > $temp1
    kdialog --textbox $temp1 300 500
}

while [ 1 ]
do
    kdialog --menu "Sys Admin Menu" "1" "Display disk space" "2" "Display users" "3" "Display memory usage" "0" "Exit" > $temp2
    if [ $? -eq 1 ]
    then
        break
    fi

    selection=$(cat $temp2)

    case $selection in
    1)
        diskspace ;;
    2)
        whoseon ;;
    3)
        memusage ;;
    0)
        break ;;
    *)
        kdialog --msgbox "Sorry, invalid selection" 10 30
    esac
done

rm -f $temp1 2> /dev/null
rm -f $temp2 2> /dev/null
18.3.2 GNOME环境

GNOME图形化环境支持两种流行的可生成标准窗口的包

gdialog

zenity

1.zenity

zenity窗口部件

选项:描述

--calendar:显示一整月日历

--entry:显示文本输入对话窗口

--error:显示错误消息对话窗口

--file-selection:显示完整的路径名和文件名对话窗口

--info:显示信息对话窗口

--list:显示多选列表或单选列表对话窗口

--notification:显示通知图标

--progress:显示进度条对话窗口

--question:显示yes/no对话窗口

--scale:显示可调整大小的窗口

--text-info:显示含有文本的文本框

--waring:显示警告对话窗口

2.在脚本中使用zenity

编写menu5脚本

#!/bin/bash

temp1=$(mktemp -t test1.XXXXXX)
temp2=$(mktemp -t test2.XXXXXX)

function diskspace {
    df -k > $temp1
    zenity --text-info --title "Disk space" --filename=$temp1 --width 750 --height 10
}

function whoseon {
    who > $temp1
    zenity --text-info --title "Logged in users" --filename=$temp1 --width 500 --height 10
}

function memusage {
    cat /proc/meminfo > $temp1
    zenity --text-info --title "Memory usage" --filename=$temp1 --width 300 --height 500
}

while [ 1 ]
do
    zenity --list --radiolist --title "Sys Admin Menu" --column "Select" --column "Menu Item" FALSE "Display diskspace" FALSE "Display users" FALSE "Display memory usage" FALSE "Exit" > $temp2
    if [ $? -eq 1 ]
    then
        break
    fi

    selection=$(cat $temp2)

    case $selection in
    "Display diskspace")
        diskspace ;;
    "Display users")
        whoseon ;;
    "Display memory usage")
        memusage ;;
    Exit)
        break ;;
    *)
        zenity --info "Sorry, invalid selection" 10 30
    esac
done

rm -f $temp1 2> /dev/null
rm -f $temp2 2> /dev/null
18.4 小结

本章主要讲解了如何在shell脚本中创建菜单以及在图形化环境中编写交互式脚本

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33349.html

相关文章

  • Linux_Linux命令行与shell脚本编程大全第十四章学习总结

    摘要:命令行与脚本编程大全第三版第十四章学习总结第十四章处理用户输入本章内容传递参数跟踪参数移动变量处理选项将选项标准化获取用户输入命令行参数读取参数会将一些称为位置参数的特殊变量分配给输入到命令行中的所有参数。 时间:2017年09月19日星期二说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版...

    王晗 评论0 收藏1
  • Linux_Linux命令行与shell脚本编程大全第十三章学习总结

    摘要:命令行与脚本编程大全第三版第十三章学习总结第十三章更多的结构化命令本章内容循环语句迭代语句使用语句循环重定向循环的输出命令命令格式命令说明变量为中的迭代值,在和语句之间输入的命令可以是一条或多条标准的命令。 时间:2017年09月13日星期三说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版...

    Forest10 评论0 收藏1
  • Linux_Linux命令行与shell脚本编程大全》第八章学习总结

    摘要:命令命令功能激活和禁用卷组删除卷组将物理卷加到卷组中从卷组中删除物理卷增加逻辑卷的大小减小逻辑卷的大小窍门在手动增加或减小逻辑卷的大小时,要特别小心。 时间:2017年08月14日星期一 说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第八章学习总结 第八章:管理文件系统 本章内容 文件...

    BoYang 评论0 收藏1
  • Linux_Linux命令行与shell脚本编程大全第十一章学习总结

    摘要:命令允许你在脚本结束时指定一个退出状态码编写脚本编写脚本编写脚本当指定的退出状态码超过时,最终的结果是指定的数值除以后得到的余数。 时间:2017年08月28日星期一说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十一章学习总结 第十一章:构建基本脚本 本章内容 使用多个命令 创建脚本...

    hizengzeng 评论0 收藏1
  • Linux_Linux命令行与shell脚本编程大全第十七章学习总结

    摘要:例如,函数名会在变量中定义,函数命令行上的任何参数都会通过等定义。在开源世界中,共享代码才是关键,而这一点同样适用于脚本函数。这里将说明如何下载安装使用脚本函数库。 时间:2017年10月09日星期一说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十七章学习总结 第十七章:创建函数 本...

    cgh1999520 评论0 收藏1

发表评论

0条评论

最新活动
阅读需要支付1元查看
<