跟散仙学shell编程(八)

上篇散仙说了linux里面函数的使用,本篇我们来看下如何在shell编写一些简单的shell交互编程,看下散仙写的一个小shell的demo类似JAVA控制台下的编程:

[search@h1 818]$ cat menu.sh 


function wec { echo "welcomeaaa"; }

function dis { clear ; df -h ; }

function whos { clear ; who ; }

function frees { clear ; free -m ; }

function menu {


echo ""

echo -e "\t1:系统管理员\n"
echo -e "\t2:显示磁盘空间\n"
echo -e "\t3:显示登录用户\n"
echo -e "\t4:显示内存使用\n"
echo -e "\t0:退出\n"
echo -en "\t\t选择类型: "

read -n 1 option

}


#调用系统餐单
while [ 1 ]
do
menu
case $option in

0) break ;;
1) echo "a"; wec ;;
2) echo "显示磁盘空间" ; dis ;;
3) echo "显示登录用户" ; whos ;;
4) echo "显示内存使用" ; frees ;;
*) echo "错误的选择" ;;
esac

#echo "any key to continue(n/y) : " ;
read -p "是否要继续(n/y):" line ;
#echo "行: $line";


if [ $line = "n" ]
then
echo "谢谢使用!";
break;
else
echo "else: $line";

fi


done


测试效果:
[search@h1 818]$ sh menu.sh 

1:系统管理员

2:显示磁盘空间

3:显示登录用户

4:显示内存使用

0:退出

选择类型: 2显示磁盘空间
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_h1-lv_root 18G 3.7G 13G 23% /
tmpfs 754M 0 754M 0% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
是否要继续(n/y):y
else: y

1:系统管理员

2:显示磁盘空间

3:显示登录用户

4:显示内存使用

0:退出

选择类型: 4显示内存使用
total used free shared buffers cached
Mem: 1506 235 1271 0 28 135
-/+ buffers/cache: 71 1435
Swap: 1983 0 1983
是否要继续(n/y):y
else: y

1:系统管理员

2:显示磁盘空间

3:显示登录用户

4:显示内存使用

0:退出

选择类型: 3显示登录用户
root pts/0 2014-08-19 01:25 (192.168.46.25)
是否要继续(n/y):n
谢谢使用!
[search@h1 818]$


下面来看下linux里面的select命令,select命令非常容易的就能构建交互式编程:
[search@h1 818]$ sh s.sh 
1) 查看磁盘:
2) 查看内存:
3) 退出程序
请输入选项: 1
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_h1-lv_root 18G 3.7G 13G 23% /
tmpfs 754M 0 754M 0% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
请输入选项: 2
total used free shared buffers cached
Mem: 1506 327 1179 0 32 217
-/+ buffers/cache: 76 1429
Swap: 1983 0 1983
请输入选项: 3
谢谢使用!
[search@h1 818]$



源码如下:
[search@h1 818]$ cat s.sh 


PS3="请输入选项: "

select answer in "查看磁盘:" "查看内存: " "退出程序"
do

case $answer in

"查看磁盘:") df -h ;;

"查看内存: ") free -m ;;

"退出程序") echo "谢谢使用!" ; break;;


esac



done
[search@h1 818]$



只有控制台的形式,是非常枯燥的,下面我们来看下如何在shell的窗体中,进行编程,如果没有这个工具包,我们可以先执行yum install dialog 下载这个包:
[code="java"]# yum install dialog
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.btte.net
* extras: mirrors.btte.net
* updates: mirrors.163.com
base | 3.7 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package dialog.x86_64 0:1.1-9.20080819.1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================================================================================================
Package Arch Version Repository Size
================================================================================================================================================================================
Installing:
dialog x86_64 1.1-9.20080819.1.el6 base 197 k

Transaction Summary
================================================================================================================================================================================
Install 1 Package(s)

Total download size: 197 k
Installed size: 512 k
Is this ok [y/N]: y
Downloading Packages:
dialog-1.1-9.20080819.1.el6.x86_64.rpm | 197 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : dialog-1.1-9.20080819.1.el6.x86_64 1/1
Verifying : dialog-1.1-9.20080819.1.el6.x86_64 1/1

Installed:
dialog.x86_64 0:1.1-9.20080819.1.el6

Complete!
# clear[/code]
下面看一些简单的例子,我们可以将一些结果重定向到我们指定的文件里面:


[img]http://dl2.iteye.com/upload/attachment/0100/3292/7683b8a5-cbe9-37da-bc30-4c2502b84cbf.jpg[/img]
[search@h1 818]$ cat age.txt 
10[search@h1 818]$

上面只是一个模拟还有下面的几个命令,也可也测试下:

dialog --title Testing --msgbox "this is a text" 10 30
dialog --title "请回复: " --yesno "回复啥:" 10 50
dialog --textbox /etc/passwd 15 45
dialog --title "选择文件吧: " --fselect $HOME/ 10 50 2>file.txt


具体的命令和使用方法,散仙在这里就不多举例子,有兴趣的朋友,可以自行上网查阅练习.
最后散仙给一个比较综合的UI小例子:



[search@h1 818]$ cat c.sh


temp=`mktemp -t test1.XXXXXX`
temp2=`mktemp -t test2.XXXXXX`

dis() { df -k > $temp ;
dialog --textbox $temp 20 60

}

whos() { who > $temp ;
dialog --textbox $temp 20 60

}


mem() {

cat /proc/meminfo > $temp

dialog --textbox $temp 20 60

}


while [ 1 ]


do


dialog --menu "系统管理菜单" 20 30 10 1 "查看磁盘信息" 2 "查看登录用户" 3 "查看内存信息" 0 "退出登录" 2>$temp2


if [ $? -eq 1 ]

then

break;

fi

selection=`cat $temp2`


#echo " 啥: $selectioin"


case $selection in

1) dis ;;
2) whos ;;
3) mem ;;
0) break ;;

*) dialog --msgbox "对不起,无效的选择! " 10 30


esac


done


rm -rf $temp 2> /dev/null
rm -rf $temp2 2> /dev/null


[search@h1 818]$


[img]http://dl2.iteye.com/upload/attachment/0100/3300/f615bfba-537a-3c6e-9c1b-8cf3182dbfb1.jpg[/img]


[img]http://dl2.iteye.com/upload/attachment/0100/3302/252981ac-691b-34ca-9355-168c278e11d8.jpg[/img]


[img]http://dl2.iteye.com/upload/attachment/0100/3304/3f19c55b-bdfb-3449-8de9-e098017a6b67.jpg[/img]


[img]http://dl2.iteye.com/upload/attachment/0100/3306/9a474586-8320-30ed-a1a6-4468dcb36c8a.jpg[/img]


[img]http://dl2.iteye.com/upload/attachment/0100/3308/c496c3da-ffa3-3fe3-b2dc-41b59de2b1d8.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值