文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>shell学习笔记一

shell学习笔记一

时间:2010-06-03  来源:mzg

这是一个脚本实现超时功能。shell好邪恶好强大。。。  #!/bin/bash
 # timed-input.sh
 # TMOUT=3   
 TIMELIMIT=3  # 设置时间为超时为3秒
 PrintAnswer()
 {
   if [ "$answer" = TIMEOUT ]
   then
     echo $answer  #打印Int14Vector的answer的值.
   else       # ..........
     echo "Your favorite veggie is $answer"
     kill $!  #  kill将不再需要TimerOn函数运行在后台,否则timeron应该是在后台一直运行!
              # $! 是运行在后台的最后一个工作的PID,也就是这个脚本是最后运行的一个进程。
   fi
 }
 TimerOn()
 {
   sleep $TIMELIMIT && kill -s 14 $$ & #*这句很关键,意思是说设定守侯的时间,并在后台运行,不影响任何用户的动作、,只是到时间用户没有反映是,发出信号并停止.如果没有&,则到时间退出,看不到提问,如果没有kill -s 14 $$,则一直停止在提问题的地方,不会正常等到时间时退出,如果这两个都没有,那么将等到时间时,才能看到提问,而且一直停止在提问的地方.---详细的>>{放在回答问题(echo -n "问题")之前意思是如果用户没有输入任何字符,将等待$TIMELIMIT秒,将发送一个信号,并结束此脚本,如果这行没有"&"(这个符号表示在后台运行该脚本),那么此程序就是在3秒之内输入了回答也不能马上退出并显示结果,需要等到3秒的时候才能退出,并且看不到提问语句.,因为有了&,这个sleep和kill语句将在后台运行,用户看不到,所以可以看到提问语句,只要回答按回车就可以退出,如果没有&,无论你输不输入答案sleep都在前台运行,等sleep运行完后,才能执行kill,.如果没有"kill -s 14 $$"命令,时间开关,意思是3秒执行它,$$表示本句的进程.如果没有这句话,需要等待sleep执行完以后才能执行下边的程序,这里也就是回答问题退出,但是不回答问题将永远停留在让你输入问题的地方了(echo -n "问题"),}累蒙了
   # ..3.,............
 }
 Int14Vector()
 {
   answer="TIMEOUT"
   PrintAnswer
   exit 14
 }
 trap Int14Vector 14  #意思是捕获信号,执行指定的程序.(参考unix-linux shell编程的26章trap命令) 如果到时间用户没有反映,trap将捕获到上边kill发出的14信号,运行int14vector函数.运行printanswer,打印出answer就会为TIMEOUT.如果用户有反映,那么将执行read读取标准输入,运行printanswer打印出用户的输入.
 echo "What is your favorite vegetable "
 TimerOn  #如果echo没有加-n就放在echo的下边,如果有-n,就放在echo的上边.
 read answer
 PrintAnswer
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载