linux开机启动项配置
很讨厌cairo-dock直接开机就启动了,还老是报错,说什么plug-in又找不到了,从GNOME换成KDE我就准备直接写在了cairo-dock了,结果一卸载cairo各种问题随之而来,只能开机禁止掉吧先。
对于GNOME而言就是直接运行gnome-session-properties,出现下面的画面进行设置即可:
对于KDE,可以直接搜索Autostart,打开接口配置:
And,我们还可以添加自己开机喜欢的东西,让他自启动。
原因是:shell脚本一直被认为是单调乏味的。
创建交互式shell脚本最常见的方法是利用菜单。为用户提供各种选项有助于知道他们了解脚本的确切功能。
Shell脚本菜单的核心是case命令,case命令根据用户在菜单中选择的字母执行特定的命令。
命令echo仅显示可打印字符,所以,如果希望使用不可打印项,必须使用-e选项。
命令read使用-n选项后,输入内容不需要按ENTER键。
比如:
#!/bin/bash
#create the munu layout
function menu
{
clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1.Display disk space"
echo -e "\t2.Display logged on users"
echo -e "\t3.Display memory usage"
echo -e "\t0.Exit program\n\n"
echo -en "\t\tEnter Option: "
read -n 1 option
}
function diskspace
{
clear
df -k
}
function whoseon
{
clear
who
}
function memusage
{
clear
cat /proc/meminfo
}
while [ 1 ]
do
menu
case $option in
0)
break;;
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
*)
clear
echo "Sorry, wrong selection";;
esac
echo -en "\n\n\t\t\tHit any key to continue"
read -n 1 line
done
clear
创建文本菜单的大多数问题就是创建菜单布局和获取输入的答案,bash shell提供了一个便利的小工具,可以自动完成所有这些工作。
命令select允许从单命令行创建菜单,然后获取输入的答案并自动处理它。命令select的格式是:
select variable in list
do
commands
done
列表参数list是用空格隔开的构建菜单的文本项列表,select命令将列表中的每一项显示为一个编号选项,然后为选择显示一个特殊的提示符(由PS3环境变量定义)。
例如下面的这个示例:
#!/bin/bash
#using select in the menu
function diskspace
{
clear
df -k
}
function whoseon
{
clear
who
}
function memusage
{
clear
cat /proc/meminfo
}
PS3="Enter option: "
select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"
do
clear
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
有一点需要注意的是,存储在变量中的结果值是整个文本字符串,而不是与该菜单项相关联的数字。文本字符串值才是需要在case语句中比较的内容。
目前有很多的终端模拟包,允许为交互式脚本添加颜色和特殊效果。
大多数终端模拟软件能够识别设置显示输出格式的ANSI转义码。ANSI转义码以控制序列指示器(control sequence indicator,CSI)开头,后面跟表示要在显示器上执行的操作的数据。CSI告诉终端该数据表示一个转义码。
要控制显示格式,必须使用选择图形再现(Select Graphic Rendition,SGR)转义码,SGE转义码的格式为:
CSIn[;k]m
该代码中的m代表SGR转义码。n和k参数定义所使用的显示控制。可以仅指定一个参数或者同时指定两个,中间用分号隔开。显示控制参数有3类:
l 效果控制代码;
l 前景色控制代码;
l 背景色控制代码;
ANSI SGR效果控制代码
代码 |
描述 |
代码 |
描述 |
0 |
重置为普通模式 |
4 |
使用单下划线(可以) |
1 |
设置为强亮度(在bash中是加粗) |
5 6 |
使用慢闪烁(没有反应) 使用快闪烁 |
2 |
设置为弱亮度(在bash中可以) |
7 |
背景、前景颜色反转(可以) |
3 |
使用斜体(这个在bash中不起作用) |
8 |
将前景色设置为背景色(可以) |
因此:要将显示设置为使用倾斜的字体,需要发送代码:
CSI3m
如果需要使用斜体和闪烁,可以发送代码:
CSI3;5m
前景色控制码和背景色控制码都使用两位数代码。前景色使用3开头的一个两位数的值,而背景色使用4开头的两位数的值,其中的第二位数字表示具体颜色。
ANSI颜色控制代码:
代码 |
颜色 |
代码 |
颜色 |
0 |
黑色 |
4 |
蓝色 |
1 |
红色 |
5 |
洋红色 |
2 |
绿色 |
6 |
青色 |
3 |
黄色 |
7 |
白色 |
因此,要指定白色前景,发送代码:
CSI37m
要设置背景色为黑色,前景色为红色,可以发送代码:
CSI31;40m
上面所说的都可以使用echo命令发送,像发送普通文本一样,将ANSI转义码发送到终端会话。唯一比较难的部分是创建CSI字符。
CSI字符通常是一个两字符序列,这个序列是ESC ASCII值,后跟左方括号字符。记住,输入方法为:Ctrl+V组合键后跟ESC键。在输入此组合键时,字符^[出现。
下面为两个例子:
注意,在一个echo命令中放置两个转义控制码时,重要的是要用双引号将代码字符串引起来。如果没有双引号,echo命令就不能正确地解释转义码,进而产生错误消息。
将前面的shell脚本只需添加上一行颜色控制码。
#!/bin/bash
#create the munu layout
function menu
{
clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1.Display disk space"
echo -e "\t2.Display logged on users"
echo -e "\t3.Display memory usage"
echo -e "\t0.Exit program\n\n"
echo -en "\t\tEnter Option: "
read -n 1 option
}
function diskspace
{
clear
df -k
}
function whoseon
{
clear
who
}
function memusage
{
clear
cat /proc/meminfo
}
echo “^[[44;33m”
while [ 1 ]
do
menu
case $option in
0)
break;;
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
*)
clear
echo "Sorry, wrong selection";;
esac
echo -en "\n\n\t\t\tHit any key to continue"
read -n 1 line
done
clear
dialog软件包是一个较好的小工具,最初有Savio Lam设计,是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。
常见的对话框空间选项:
常见的对话框控件选项有:
类型 用于创建类型的选项 含 义
–calendar 提供了一个日历,让你可以选择日期
–checklist 允许你显示一个选项列表,每个选项都可以被单独的选择 (复选框)
–from 允许您建立一个带标签的文本字段,并要求填写
–fselect 提供一个路径,让你选择浏览的文件
–gauge 显示一个表,呈现出完成的百分比,就是显示出进度。
–infobox 显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕 (信息框)
–inputbox 让用户输入文本 (输入框 )
–inputmenu 提供一个可供用户编辑的菜单 (可编辑的菜单框)
–menu 显示一个列表供用户选择 (菜单框)
–msgbox 显示一条消息,并要求用户选择一个确定按钮 (消息框 )
–pause 显示一个表格用来显示一个指定的暂停期的状态
–passwordbox 显示一个输入框,它隐藏文本
–passwordfrom 显示一个来源于标签并且隐藏的文本字段
–radiolist 提供一个菜单项目组,只有一个项目,可以选择 (单选框)
–tailbox 在一个滚动窗口文件中使用tail命令来显示文本
–tailboxbg 跟tailbox类似,但是在background模式下操作
–textbox 在带有滚动条的文本框中显示文件的内容 (文本框)
–timebox 提供一个窗口,选择小时,分钟,秒
–yesno 提供一个带有yes和no按钮的简单信息框 (是/否框)
要在命令行上具体制定一个特定的小部件,需要使用双破折号格式:
dialog –widget parameters
其中的widget为上面所说的控件,parameters定义该小部件窗口的大小以及它所需要的任何文本。
每个对话框小部件均以两种形式提供输出:
l 使用STDERR;
l 使用退出代码状态;
dialog命令的退出状态决定用户所选择的按钮,如果选择OK或Yes按钮,该dialog命令将返回0退出状态;如果选择Cancel或No按钮,返回1退出状态,可以使用标准$?变量确定在该对话框小部件中选择的按钮。
比如:
dialog – – title Testing – -msgbox “This is a test” 10 20
此时的OK键是支持鼠标点击的,只是没有什么效果。
dialog – -title “Please answer” – -yesno “is this thing on” 10 20
而对于inputbox小部件为用户输入文本字符串提供了一个简单的文本框。dialog命令将文本字符串的值发送到STDERR,所以必须重定向才能获取答案。例如:
dialog – -inputbox “Enter your age:” 10 20 2>age.txt
完成后,将会生成一个age.txt文件保存输入的27。此时我们可以再次重定向以使用该值。
dialog – -textbox /etc/passwd 15 45
可以使用方向键在文本文件中上下左右移动。
dialog –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>text.txt
移动方向键可以高亮显示标记的条目,在输入OK后会将选择的条目tag发送到text.txt文件中。
dialog – -title “Select a file” –fselect $HOME/ 10 50 2>file.txt
选项 |
描述 |
–add-widged |
除非按Esc或Cancel键,否则继续进入下一个对话框。 |
–aspect ratio |
指定窗口宽度/高度的纵横比 |
—backtitle backtitle |
指定backtitle字符串显示在背景下,在屏幕的顶部。 |
—begin x y |
指定的位置在屏幕上的上一个对话框的左上角 |
–cancel-label label |
为Cancel按钮指定一个可供选择的标签 |
–clear |
使用对话框默认背景色清除显示 |
—colors |
允许在对话框文本中潜入ANSI颜色代码 |
–cr-wrap |
允许在对话框文本中加入换行符,强制换行 |
–create-rc file |
转储样本配置文件至指定文件 |
—defaultno |
将默认值 yes/no对话框设置为使用no |
—default-item string |
设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认 |
–exit-label label |
为Exit按钮指定一个可供选择的标签 |
–extra-button |
在OK和Cancel按钮之间,显示一个其他按钮 |
–extra-label label |
为extra按钮指定一个可供选择的标签 |
–help |
显示dialog命令的帮助信息 |
–help-button |
在OK和Cancel按钮之后显示Help按钮 |
–help-label label |
为help按钮指定一个可供选择的标签 |
–help-status |
在help按钮中的帮助信息被选中后,记录下检查列表、单选框列表或表单信息 |
–ignore |
忽略dialog不能识别的选项 |
除STDIN之外,指定其他可供选择的文件描述符 |
|
—insecure |
输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点 |
–item-help |
在屏幕的底部,为检查列表、单选框列表、菜单中的每一个标签添加该标签的帮助 |
–keep-window |
不要清除屏幕上的旧小部件 |
–max-input size |
指定输入字符串的最大规模,默认为2048 |
—nocancel |
设置在输入框,菜单,和复选框中,禁止选“cancel” |
–no-collapse |
在对话框文本中,不要将制表换行符转换为空格。 |
–no-kill |
将tailboxbg对话框放在背景中,并禁止该进程的SIGHUP |
–no-label label |
将No按钮指定一个可供选择的标签 |
—no-shadow |
禁止阴影出现在每个对话框的底部 |
—ok-label string |
覆盖使用“OK”按钮的标签 |
–output-fd fd |
除STDERR之外,指定其他可供选择的文件描述符 |
–print-maxsize |
打印对话框窗口允许输出的最大尺寸 |
–print-size |
将每个对话框窗口的尺寸打印至输出 |
–print-version |
将对话框版本打印至输出 |
–separator-output |
无需引用,将checklist小部件的结果一次一行的输出 |
–separator string |
指定一个字符串来隔离每个小部件的输出 |
–separator-widget string |
指定一个字符串来隔离每个小部件的输出 |
–shadow |
绘制阴影至每一个窗口的右下方 |
–single-quoted |
需要时对检查列表输出使用单引用 |
–sleep sec |
在处理对话框窗口后延迟指定的秒数 |
–stderr |
将输出发送至STDERR,这是默认行为 |
–stdout |
将输出发送至STDOUT |
–tab-correct |
将换行符转换为空格 |
–tab-len n |
指定一个制表符所使用的空格数,默认为8个 |
—timeout secs |
超时(返回的错误代码),如果用户在指定的时间内没有给出相应 |
—title title |
指定将在对话框的上方显示的标题字符串 |
–trim |
删除对话框文本中字符串首部的空格和换行符 |
–visit-items |
为了把项目列表包含在内,而修改对话框窗口中的制表符 |
–yes-label label |
为yes按钮指定一个可供选择的标签 |
其中的—backtitle backtitle选项是创建贯穿脚本的通用菜单标题的一种十分方便的方法。如果为每个对话框窗口置顶,该选项将贯穿应用程序始终,为脚本创建专业级的外观。
在脚本中使用dialog命令时一件非常容易的事情。只需要记住两点:
l 如果Cancel或No按钮可用,请检查dialog命令的退出状态;
l 重定向STDERR以获取输出值
如果遵循上面的两条规则,就可以立即获得专业外观的交互式脚本。例如:
#!/bin/bash
#using dialog to create a menu
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
function diskspace
{
#clear
df -k > $temp
dialog –textbox $temp 20 60
}
function whoseon
{
#clear
who > $temp
dialog –textbox $temp 20 50
}
function memusage
{
#clear
cat /proc/meminfo > $temp
dialog –textbox $temp 20 50
}
while [ 1 ]
do
dialog –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display logged on users" 3 "Display memory usage" 0 "Exit program" 2>$temp2
if [ $? -eq 1 ]
then
break
fi
selection=`cat $temp2`
case $selection in
0)
break;;
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
*)
dialog –msgbox "Sorry, wrong selection" 10 30
esac
done
rm -f $temp 2>/dev/null
rm -f $temp2 2>/dev/null
其中temp用于保存各个命令的输出,temp2保存在主菜单对话框中选择的值。
KDE和GNOME桌面环境都扩充了dialog命令的思想,在各自环境中包含了生成X Windows图形小部件的命令。
比如KDE使用kdialog,而GNOME使用gdialog和zenity。
KDE图形环境默认包括kdialog软件包,在KDE桌面环境下,kdialog软件包使用kdialog命令生成标准窗口,类似对话类型的小部件。这使您可以直接在shell脚本中创建Windows质量的用户界面。
注意,kdialog与dialog最大的区别是,kdialog窗口小部件使用STDOUT而非STDERR输出值。
#!/bin/bash
#using kdialog to create a menu
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
function diskspace
{
#clear
df -k > $temp
kdialog –textbox $temp 1000 10
}
function whoseon
{
#clear
who > $temp
kdialog –textbox $temp 500 10
}
function memusage
{
#clear
cat /proc/meminfo > $temp
kdialog –textbox $temp 300 500
}
while [ 1 ]
do
kdialog –menu "Sys Admin Menu" "1" "Display disk space" "2" "Display logged on users" "3" "Display memory usage" "0" "Exit program" >$temp2
if [ $? -eq 1 ]
then
break
fi
selection=`cat $temp2`
case $selection in
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
0)
break;;
*)
kdialog –msgbox "Sorry, wrong selection"
esac
done
GNOME图形化环境支持两种可以生成标准窗口的流行软件包。
l gdialog
l zenity
到目前为止,大多数GNOME桌面中,zenity是最常见的软件包。
#!/bin/bash
#using zenity to create a menu
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
function diskspace
{
#clear
df -k > $temp
zenity –text-info –title "Disk space" –filename=$temp –width 750 –height 10
}
function whoseon
{
#clear
who > $temp
zenity –text-info –title "Logged in users" –filename=$temp –width 500 –height 10
# zenity –text-info $temp 20 50
}
function memusage
{
#clear
cat /proc/meminfo > $temp
zenity –text-info –title "Memory usage" –filename=$temp –width 300 –height 500
zenity –text-info $temp 20 50
}
while [ 1 ]
do
zenity –list –radiolist –title "Sys Admin Menu" –column "Select" –column "Menu Item" FALSE "Display disk space" FALSE "Display logged on users" FALSE "Display memory usage" FALSE "Exit program" >$temp2
if [ $? -eq 1 ]
then
break
fi
selection=`cat $temp2`
case $selection in
"Exit")
break;;
"Display disk space")
diskspace;;
"Display users")
whoseon;;
"Display memory usage")
memusage;;
*)
zenity –info "Sorry, invalid selection"
esac
done
使用zenity软件包,可以在GNOME桌面上,为交互式shell脚本增加Windows的感觉。
日历的区别:
Kdialog
Zenity
原因是:shell脚本一直被认为是单调乏味的。
创建交互式shell脚本最常见的方法是利用菜单。为用户提供各种选项有助于知道他们了解脚本的确切功能。
Shell脚本菜单的核心是case命令,case命令根据用户在菜单中选择的字母执行特定的命令。
命令echo仅显示可打印字符,所以,如果希望使用不可打印项,必须使用-e选项。
命令read使用-n选项后,输入内容不需要按ENTER键。
比如:
#!/bin/bash
#create the munu layout
function menu
{
clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1.Display disk space"
echo -e "\t2.Display logged on users"
echo -e "\t3.Display memory usage"
echo -e "\t0.Exit program\n\n"
echo -en "\t\tEnter Option: "
read -n 1 option
}
function diskspace
{
clear
df -k
}
function whoseon
{
clear
who
}
function memusage
{
clear
cat /proc/meminfo
}
while [ 1 ]
do
menu
case $option in
0)
break;;
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
*)
clear
echo "Sorry, wrong selection";;
esac
echo -en "\n\n\t\t\tHit any key to continue"
read -n 1 line
done
clear
创建文本菜单的大多数问题就是创建菜单布局和获取输入的答案,bash shell提供了一个便利的小工具,可以自动完成所有这些工作。
命令select允许从单命令行创建菜单,然后获取输入的答案并自动处理它。命令select的格式是:
select variable in list
do
commands
done
列表参数list是用空格隔开的构建菜单的文本项列表,select命令将列表中的每一项显示为一个编号选项,然后为选择显示一个特殊的提示符(由PS3环境变量定义)。
例如下面的这个示例:
#!/bin/bash
#using select in the menu
function diskspace
{
clear
df -k
}
function whoseon
{
clear
who
}
function memusage
{
clear
cat /proc/meminfo
}
PS3="Enter option: "
select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"
do
clear
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
有一点需要注意的是,存储在变量中的结果值是整个文本字符串,而不是与该菜单项相关联的数字。文本字符串值才是需要在case语句中比较的内容。
目前有很多的终端模拟包,允许为交互式脚本添加颜色和特殊效果。
大多数终端模拟软件能够识别设置显示输出格式的ANSI转义码。ANSI转义码以控制序列指示器(control sequence indicator,CSI)开头,后面跟表示要在显示器上执行的操作的数据。CSI告诉终端该数据表示一个转义码。
要控制显示格式,必须使用选择图形再现(Select Graphic Rendition,SGR)转义码,SGE转义码的格式为:
CSIn[;k]m
该代码中的m代表SGR转义码。n和k参数定义所使用的显示控制。可以仅指定一个参数或者同时指定两个,中间用分号隔开。显示控制参数有3类:
l 效果控制代码;
l 前景色控制代码;
l 背景色控制代码;
ANSI SGR效果控制代码
代码 |
描述 |
代码 |
描述 |
0 |
重置为普通模式 |
4 |
使用单下划线(可以) |
1 |
设置为强亮度(在bash中是加粗) |
5 6 |
使用慢闪烁(没有反应) 使用快闪烁 |
2 |
设置为弱亮度(在bash中可以) |
7 |
背景、前景颜色反转(可以) |
3 |
使用斜体(这个在bash中不起作用) |
8 |
将前景色设置为背景色(可以) |
因此:要将显示设置为使用倾斜的字体,需要发送代码:
CSI3m
如果需要使用斜体和闪烁,可以发送代码:
CSI3;5m
前景色控制码和背景色控制码都使用两位数代码。前景色使用3开头的一个两位数的值,而背景色使用4开头的两位数的值,其中的第二位数字表示具体颜色。
ANSI颜色控制代码:
代码 |
颜色 |
代码 |
颜色 |
0 |
黑色 |
4 |
蓝色 |
1 |
红色 |
5 |
洋红色 |
2 |
绿色 |
6 |
青色 |
3 |
黄色 |
7 |
白色 |
因此,要指定白色前景,发送代码:
CSI37m
要设置背景色为黑色,前景色为红色,可以发送代码:
CSI31;40m
上面所说的都可以使用echo命令发送,像发送普通文本一样,将ANSI转义码发送到终端会话。唯一比较难的部分是创建CSI字符。
CSI字符通常是一个两字符序列,这个序列是ESC ASCII值,后跟左方括号字符。记住,输入方法为:Ctrl+V组合键后跟ESC键。在输入此组合键时,字符^[出现。
下面为两个例子:
注意,在一个echo命令中放置两个转义控制码时,重要的是要用双引号将代码字符串引起来。如果没有双引号,echo命令就不能正确地解释转义码,进而产生错误消息。
将前面的shell脚本只需添加上一行颜色控制码。
#!/bin/bash
#create the munu layout
function menu
{
clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1.Display disk space"
echo -e "\t2.Display logged on users"
echo -e "\t3.Display memory usage"
echo -e "\t0.Exit program\n\n"
echo -en "\t\tEnter Option: "
read -n 1 option
}
function diskspace
{
clear
df -k
}
function whoseon
{
clear
who
}
function memusage
{
clear
cat /proc/meminfo
}
echo “^[[44;33m”
while [ 1 ]
do
menu
case $option in
0)
break;;
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
*)
clear
echo "Sorry, wrong selection";;
esac
echo -en "\n\n\t\t\tHit any key to continue"
read -n 1 line
done
clear
dialog软件包是一个较好的小工具,最初有Savio Lam设计,是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。
常见的对话框空间选项:
常见的对话框控件选项有:
类型 用于创建类型的选项 含 义
–calendar 提供了一个日历,让你可以选择日期
–checklist 允许你显示一个选项列表,每个选项都可以被单独的选择 (复选框)
–from 允许您建立一个带标签的文本字段,并要求填写
–fselect 提供一个路径,让你选择浏览的文件
–gauge 显示一个表,呈现出完成的百分比,就是显示出进度。
–infobox 显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕 (信息框)
–inputbox 让用户输入文本 (输入框 )
–inputmenu 提供一个可供用户编辑的菜单 (可编辑的菜单框)
–menu 显示一个列表供用户选择 (菜单框)
–msgbox 显示一条消息,并要求用户选择一个确定按钮 (消息框 )
–pause 显示一个表格用来显示一个指定的暂停期的状态
–passwordbox 显示一个输入框,它隐藏文本
–passwordfrom 显示一个来源于标签并且隐藏的文本字段
–radiolist 提供一个菜单项目组,只有一个项目,可以选择 (单选框)
–tailbox 在一个滚动窗口文件中使用tail命令来显示文本
–tailboxbg 跟tailbox类似,但是在background模式下操作
–textbox 在带有滚动条的文本框中显示文件的内容 (文本框)
–timebox 提供一个窗口,选择小时,分钟,秒
–yesno 提供一个带有yes和no按钮的简单信息框 (是/否框)
要在命令行上具体制定一个特定的小部件,需要使用双破折号格式:
dialog –widget parameters
其中的widget为上面所说的控件,parameters定义该小部件窗口的大小以及它所需要的任何文本。
每个对话框小部件均以两种形式提供输出:
l 使用STDERR;
l 使用退出代码状态;
dialog命令的退出状态决定用户所选择的按钮,如果选择OK或Yes按钮,该dialog命令将返回0退出状态;如果选择Cancel或No按钮,返回1退出状态,可以使用标准$?变量确定在该对话框小部件中选择的按钮。
比如:
dialog – – title Testing – -msgbox “This is a test” 10 20
此时的OK键是支持鼠标点击的,只是没有什么效果。
dialog – -title “Please answer” – -yesno “is this thing on” 10 20
而对于inputbox小部件为用户输入文本字符串提供了一个简单的文本框。dialog命令将文本字符串的值发送到STDERR,所以必须重定向才能获取答案。例如:
dialog – -inputbox “Enter your age:” 10 20 2>age.txt
完成后,将会生成一个age.txt文件保存输入的27。此时我们可以再次重定向以使用该值。
dialog – -textbox /etc/passwd 15 45
可以使用方向键在文本文件中上下左右移动。
dialog –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>text.txt
移动方向键可以高亮显示标记的条目,在输入OK后会将选择的条目tag发送到text.txt文件中。
dialog – -title “Select a file” –fselect $HOME/ 10 50 2>file.txt
选项 |
描述 |
–add-widged |
除非按Esc或Cancel键,否则继续进入下一个对话框。 |
–aspect ratio |
指定窗口宽度/高度的纵横比 |
—backtitle backtitle |
指定backtitle字符串显示在背景下,在屏幕的顶部。 |
—begin x y |
指定的位置在屏幕上的上一个对话框的左上角 |
–cancel-label label |
为Cancel按钮指定一个可供选择的标签 |
–clear |
使用对话框默认背景色清除显示 |
—colors |
允许在对话框文本中潜入ANSI颜色代码 |
–cr-wrap |
允许在对话框文本中加入换行符,强制换行 |
–create-rc file |
转储样本配置文件至指定文件 |
—defaultno |
将默认值 yes/no对话框设置为使用no |
—default-item string |
设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认 |
–exit-label label |
为Exit按钮指定一个可供选择的标签 |
–extra-button |
在OK和Cancel按钮之间,显示一个其他按钮 |
–extra-label label |
为extra按钮指定一个可供选择的标签 |
–help |
显示dialog命令的帮助信息 |
–help-button |
在OK和Cancel按钮之后显示Help按钮 |
–help-label label |
为help按钮指定一个可供选择的标签 |
–help-status |
在help按钮中的帮助信息被选中后,记录下检查列表、单选框列表或表单信息 |
–ignore |
忽略dialog不能识别的选项 |
除STDIN之外,指定其他可供选择的文件描述符 |
|
—insecure |
输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点 |
–item-help |
在屏幕的底部,为检查列表、单选框列表、菜单中的每一个标签添加该标签的帮助 |
–keep-window |
不要清除屏幕上的旧小部件 |
–max-input size |
指定输入字符串的最大规模,默认为2048 |
—nocancel |
设置在输入框,菜单,和复选框中,禁止选“cancel” |
–no-collapse |
在对话框文本中,不要将制表换行符转换为空格。 |
–no-kill |
将tailboxbg对话框放在背景中,并禁止该进程的SIGHUP |
–no-label label |
将No按钮指定一个可供选择的标签 |
—no-shadow |
禁止阴影出现在每个对话框的底部 |
—ok-label string |
覆盖使用“OK”按钮的标签 |
–output-fd fd |
除STDERR之外,指定其他可供选择的文件描述符 |
–print-maxsize |
打印对话框窗口允许输出的最大尺寸 |
–print-size |
将每个对话框窗口的尺寸打印至输出 |
–print-version |
将对话框版本打印至输出 |
–separator-output |
无需引用,将checklist小部件的结果一次一行的输出 |
–separator string |
指定一个字符串来隔离每个小部件的输出 |
–separator-widget string |
指定一个字符串来隔离每个小部件的输出 |
–shadow |
绘制阴影至每一个窗口的右下方 |
–single-quoted |
需要时对检查列表输出使用单引用 |
–sleep sec |
在处理对话框窗口后延迟指定的秒数 |
–stderr |
将输出发送至STDERR,这是默认行为 |
–stdout |
将输出发送至STDOUT |
–tab-correct |
将换行符转换为空格 |
–tab-len n |
指定一个制表符所使用的空格数,默认为8个 |
—timeout secs |
超时(返回的错误代码),如果用户在指定的时间内没有给出相应 |
—title title |
指定将在对话框的上方显示的标题字符串 |
–trim |
删除对话框文本中字符串首部的空格和换行符 |
–visit-items |
为了把项目列表包含在内,而修改对话框窗口中的制表符 |
–yes-label label |
为yes按钮指定一个可供选择的标签 |
其中的—backtitle backtitle选项是创建贯穿脚本的通用菜单标题的一种十分方便的方法。如果为每个对话框窗口置顶,该选项将贯穿应用程序始终,为脚本创建专业级的外观。
在脚本中使用dialog命令时一件非常容易的事情。只需要记住两点:
l 如果Cancel或No按钮可用,请检查dialog命令的退出状态;
l 重定向STDERR以获取输出值
如果遵循上面的两条规则,就可以立即获得专业外观的交互式脚本。例如:
#!/bin/bash
#using dialog to create a menu
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
function diskspace
{
#clear
df -k > $temp
dialog –textbox $temp 20 60
}
function whoseon
{
#clear
who > $temp
dialog –textbox $temp 20 50
}
function memusage
{
#clear
cat /proc/meminfo > $temp
dialog –textbox $temp 20 50
}
while [ 1 ]
do
dialog –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display logged on users" 3 "Display memory usage" 0 "Exit program" 2>$temp2
if [ $? -eq 1 ]
then
break
fi
selection=`cat $temp2`
case $selection in
0)
break;;
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
*)
dialog –msgbox "Sorry, wrong selection" 10 30
esac
done
rm -f $temp 2>/dev/null
rm -f $temp2 2>/dev/null
其中temp用于保存各个命令的输出,temp2保存在主菜单对话框中选择的值。
KDE和GNOME桌面环境都扩充了dialog命令的思想,在各自环境中包含了生成X Windows图形小部件的命令。
比如KDE使用kdialog,而GNOME使用gdialog和zenity。
KDE图形环境默认包括kdialog软件包,在KDE桌面环境下,kdialog软件包使用kdialog命令生成标准窗口,类似对话类型的小部件。这使您可以直接在shell脚本中创建Windows质量的用户界面。
注意,kdialog与dialog最大的区别是,kdialog窗口小部件使用STDOUT而非STDERR输出值。
#!/bin/bash
#using kdialog to create a menu
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
function diskspace
{
#clear
df -k > $temp
kdialog –textbox $temp 1000 10
}
function whoseon
{
#clear
who > $temp
kdialog –textbox $temp 500 10
}
function memusage
{
#clear
cat /proc/meminfo > $temp
kdialog –textbox $temp 300 500
}
while [ 1 ]
do
kdialog –menu "Sys Admin Menu" "1" "Display disk space" "2" "Display logged on users" "3" "Display memory usage" "0" "Exit program" >$temp2
if [ $? -eq 1 ]
then
break
fi
selection=`cat $temp2`
case $selection in
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
0)
break;;
*)
kdialog –msgbox "Sorry, wrong selection"
esac
done
GNOME图形化环境支持两种可以生成标准窗口的流行软件包。
l gdialog
l zenity
到目前为止,大多数GNOME桌面中,zenity是最常见的软件包。
#!/bin/bash
#using zenity to create a menu
temp=`mktemp -t test.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`
function diskspace
{
#clear
df -k > $temp
zenity –text-info –title "Disk space" –filename=$temp –width 750 –height 10
}
function whoseon
{
#clear
who > $temp
zenity –text-info –title "Logged in users" –filename=$temp –width 500 –height 10
# zenity –text-info $temp 20 50
}
function memusage
{
#clear
cat /proc/meminfo > $temp
zenity –text-info –title "Memory usage" –filename=$temp –width 300 –height 500
zenity –text-info $temp 20 50
}
while [ 1 ]
do
zenity –list –radiolist –title "Sys Admin Menu" –column "Select" –column "Menu Item" FALSE "Display disk space" FALSE "Display logged on users" FALSE "Display memory usage" FALSE "Exit program" >$temp2
if [ $? -eq 1 ]
then
break
fi
selection=`cat $temp2`
case $selection in
"Exit")
break;;
"Display disk space")
diskspace;;
"Display users")
whoseon;;
"Display memory usage")
memusage;;
*)
zenity –info "Sorry, invalid selection"
esac
done
使用zenity软件包,可以在GNOME桌面上,为交互式shell脚本增加Windows的感觉。
日历的区别:
Kdialog
Zenity
早期的Linux只有一个连接Linux操作系统的简单文本界面。
X Window即X Windows图形用户接口,是一种计算机软件系统和网络协议,提供了一个基础的图形用户界面(GUI)和丰富的输入设备能力联网计算机。其中软件编写使用广义的命令集,它创建了一个硬件抽象层,允许设备独立性和重用方案的任何计算机上实现。
X Window软件是一个低级别的程序,能与PC中的显卡和监视器直接交互,并控制Linux应用程序如何在计算机中展示高级窗口和图形。
Linux并不是唯一使用X Window System的操作系统,X Window System针对不同的操作系统编写了很多版本,对于Linux来说,只有两个软件包能执行X Window,它们是XFree86和X.org。这两个软件包的工作原理相同,都控制着Linux如何使用显卡在监视器上显示内容,这个这对特定的系统进行的配置一般都在安装Linux时自动完成。
自1992年至2004年,XFree86是XWindow系统最被广泛使用的基建平台。XFree86是 X Window系统的一个实现。最初是为 IBM PC兼容机上的 Unix类 OS 开发,现在已经应用于众多操作系统的平台。自1992年至2004年,它一直循著自由发放的开放源代码模式发展着。当前版本是4.7.0。 它主要的运作平台是Unix类操作系统,包括各版本的UNIX、Linux、BSD、Solaris、MacOS X、IRIX、OpenVMS及Cygwin/X等。 由2004年开始,它再不是以GPL软件许可证的形式出现,而是使用XFree86®Project 公司所拥有的XFree86 License version 1.1软件许可证模式发放。
X.Org 是 X Window System 的开源实现版本,它支持Linux、Solaris、以及BSD 平台。目前它的应用越来越广泛,许多Linux发行版开始使用它来替代旧的XFree86系统。
核心X Window软件仅仅生成一个图形显示环境,尽管这对于运行单个应用程序而言很不错,但是对于日常的计算机使用并不很实用,没有任何桌面环境允许用户操纵文件或启动程序,要实现这些功能,需要在X Window系统软件上安装桌面环境。
桌面环境目前主流的为KDE和GNOME,剩下的几种为轻量级的图形界面,比较适合于低内存、低配置的电脑使用。
KDE项目始建于1996年10月,确切的公布日期是1996年10月14日。KDE项目是由图形排版工具Lyx的开发者、一位名为Matthias Ettrich的德国人发起的,目的是为满足普通用户也能够通过简单易用的桌面来管理Unix工作站上的各种应用软件以及完成各种任务。该项目旨在创建类似于Microsoft Windows环境的图形桌面。
GNOME(The GNU Network Object Model Environment)是一种让使用者容易操作和设定电脑环境的工具,GNOME 包含了 Panel (用来启动此程式和显示目前的状态)、桌面 (应用程式和资料放置的地方)、及一系列的标准桌面工具和应用程式,并且能让各个应用程式都能正常地运作。不管之前使用何种操作系统,都能轻易地使用 GNOME 功能强大的图形接口工具。
目前GNOME已经成为许多Linux发行版默认的桌面环境。
一个简陋的桌面,不包括Panel,只有一个弹出菜单供启动应用程序使用。
Fluxbox是一个基于GNU/Linux的轻量级图形操作界面,它基于Blackbox 0.61.1代码开发,它虽然没有GNOME和KDE那样精美,但由于它的运行对系统资源和配置要求极低,所以它被安装到很多较旧的或是对性能要求较高的机器上,其菜单和相关配置被保存于用户根目录下的.fluxbox目录里,这样使得它的配置极为便利。它的用户界面仅有一个任务栏与右键弹出式菜单。
Fluxbox是类Unix系统里一个极为轻量极的图形界面,它的运行速度相当快。它基于Blackbox并与之相兼容,这两者的窗体控件,色调等都极为相似。Fluxbox对KDE、Xfce、Gnome的程序支持也很不错。并且,它不需要借用其他的窗口管理器。
类似于KDE桌面,但是图形化比较低,用于低内存环境。
Xfce是一个在Unix与Unix-like操作系统上运行的桌面环境,如Linux与FreeBSD,它主要是由鼠标设定,而它的设定档通常不会被普通用户看到。
Xfce 是一个有很长历史的的桌面环境项目了,在很多U盘 Linux 中可以见到它的身影。
Xfce是使用率仅次于KDE与Gnome的Linux桌面系统。随着Xfce的不断发展,现在使用Xfce作桌面的系统已经越来越多了,一些大型的发行版如Debian 与Fedora Core将其作为可选择桌面,而且Xubuntu GNU/Linux、SAM Linux Desktop以及国内的lucky8k-veket都将Xfce作默认的桌面。
支持一些高级桌面功能,如虚拟桌面和虚拟Panel,但可在低内存环境运行。
FVWM作为一种虚拟桌面的代表,宗旨为以最小的内存换取最多的特性。FVWM可以轻而易举的模拟大多数的桌面系统和自定义的桌面。
fvwm是一个X11的窗口管理器,设计理念为减少内存消耗,提供3D外观和虚拟桌面。FVWM是ICCCM兼容的,它的开发很活跃,支持也很优秀。FVWM是一种非常优秀的窗口管理器,一旦配置完成便可以长久使用。
Fvwm是完全支持EWMH特性的一个WM,可以让你取得软件窗口特性的全部控制权。比如,如果你想让任意软件窗口达到quake-console(著名的quake控制台模式,使用`热键唤出或隐藏窗口)的操作方式,在Fvwm的配置里面,写上2、3句话就可以了。
衍生自fvwm,外观类似Window95桌面。