上篇散仙说了linux里面函数的使用,本篇我们来看下如何在shell编写一些简单的shell交互编程,看下散仙写的一个小shell的demo类似JAVA控制台下的编程:
测试效果:
下面来看下linux里面的select命令,select命令非常容易的就能构建交互式编程:
源码如下:
只有控制台的形式,是非常枯燥的,下面我们来看下如何在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]
上面只是一个模拟还有下面的几个命令,也可也测试下:
具体的命令和使用方法,散仙在这里就不多举例子,有兴趣的朋友,可以自行上网查阅练习.
最后散仙给一个比较综合的UI小例子:
[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]
[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]