和散仙学shell编程(八)
跟散仙学shell编程(八)
上篇散仙说了linux里面函数的使用,本篇我们来看下如何在shell编写一些简单的shell交互编程,看下散仙写的一个小shell的demo类似JAVA控制台下的编程:
测试效果:
下面来看下linux里面的select命令,select命令非常容易的就能构建交互式编程:
源码如下:
只有控制台的形式,是非常枯燥的,下面我们来看下如何在shell的窗体中,进行编程,如果没有这个工具包,我们可以先执行yum install dialog 下载这个包:
下面看一些简单的例子,我们可以将一些结果重定向到我们指定的文件里面:

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





上篇散仙说了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 下载这个包:
[root@h1 ~]# 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! [root@h1 ~]# clear
下面看一些简单的例子,我们可以将一些结果重定向到我们指定的文件里面:
[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]$