shell中过滤trap产生的控制符

      今天是着手撰写iptables配置工具的第一天,遇到了好多问题,但通过查资料基本上都解决了,有一些小经验分享,同时也有一些疑问,请教网上的各位高手。

 

      1、【保持格式输出信息】

     

      用shell写iptables配置工具,当然是为了方便应用,要有好的交互。我着手的第一步是编写小应用的界面。在这里遇到了不少问题,当然通过查阅资料和man手册,解决了所有问题,不过,仍旧拿出来和新手们分享。

 

      编写界面无非是用echo进行输出,这样可以有比较好的版面控制,那么有没有更简单的办法呢?当然有了,使用echo进行输出,永远不会比直接输出有格式的文件简单。因此,个人倾向于一下方法:

 

 

 

      如上代码,使用关键字进行标记格式文本的区域,这样比一行行的使用echo进行输出简单的多。

以上脚本中MENU之间的信息是按照现有的格式,直接输出的。

 

 

      2、【trap来截获信号,防止用户通过CTRL+C、CTRL+/强制性退出】

 

 

      这种方法可用可不用,个人觉得使用trap并非是强制用户按照程序流程走。而是屏蔽一些导致程序结束的按键,以免出现用户误操作引起的程序以外终止。

 

 

      今天在写iptables小应用的时候,为上面的菜单栏添加了判断,以便用户选择不同的选项,执行相应的操作,一开始的时候,是这样做的:

 

 

 

      后来经过测试,发现一个问题,脚本运行后,等待用户输入一个选项,并且,不能够通过CTRL+C来退出。这个时候,如果用户不小心按了下Ctrl+c 后又输入了一个选项(假如是A)。

     

      虽然,并不能终止脚本,而且,光标处依旧显示的是 A,可是在下面的case判断中,就会匹配到*选项,这说明,在使用trap进行信号截获的时候,虽然能够屏蔽掉CTRL+C这样的按键操作,但是这些控制符依旧会和用户的输入混杂在一起,影响了程序对用户输入字符串的匹配判断。

 

      因此,要过滤掉这些特殊的控制字符,将纯净的字符数据传入程序,进行匹配判断。因此想到了shell下的col 命令。col -b 这个用法将过滤掉字符串中所有的特殊字符。因此,我是这样做的:

 

 

 

      通过测试,依旧不能正常判断,于是,注意力转移在了trap信号捕获方式上了。

网上资料解释说,trap命令在shell接收到信号时,将执行双引号中的命令串,这样又回到了read命令的上方trap上,因此,一些隐含的控制符总会混在用户的输入中去。

 

      既然trap是截获信号的时候,去执行引号之内的命令行,为何不将过滤命令放入trap中去执行,只要截获信号,就去过滤。于是产生如下代码:

 

 

 

至此,今天写的代码段中存在的问题,完美解决。因为主要是第二个问题解决的相当慢,所以,就得来今天这篇文章的标题,笔者也不知道如何进行这个问题的描述,或者,linux中实际的trap机制还另有隐情,还请各位高手指点,在此先谢过各位网友...

 

 

 

                                                                             oralq

                                                                           2010.5.9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值