shell

shell.3.1 bash脚本编程:信号捕捉

 

1、trap命令
trap命令不能捕捉9号信号(SIGKILL)和15号信号(SIGTERM);

查看信号列表:
~]#  trap  -l
~]#  kill  -l

查看signal详细帮助:
~]#  man  7  signal

常可以进行捕捉的信号:HUP,INT

信号捕捉书写格式:trap  ‘COMMAND’  SIGNALS
备注:COMMAND外面的单引号是指定格式;COMMAND可以是单个命令,也可以是复杂的命令组成,也可以是函数;

脚本理解:

#!/bin/bash
#

declare -a host_tmp_files
trap 'first_trap' INT                           ##定义一个信号捕捉,调用函数;

first_trap() {                                   ##定义一个函数;函数内置删除所有临时文件的操作;
  echo "QUIT."
  rm -rf ${host_tmp_files[@]}
  exit 11
}


for ((i=1;i<=254;i++)); do
  tmp_file=${mktemp /tmp/ping.XXXXXX}                    ##每循环一次,都创建一个临时文件;
  if ping -W 1 -c 1 192.168.206.$i &> /dev/null; then
    echo "192.168.206.$i is up." | tee $tmp_file       ##符合条件的信息都记录到单独的临时文件中;
  else
    echo "192.168.206.$i is down." | tee $tmp_file     ##符合条件的信息都记录到单独的临时文件中;
  fi
  host_tmp_files[${#host_tmp_files[@]}]=$tmp_file        ##向数组中追加元素,数组是'host_tmp_files',元素是每个临时文件;
done

rm -rf ${host_tmp_files[@]}                                ##按脚本逻辑顺利执行完成后,最后执行删除所有临时文件的操作;

 

2、脚本着色

在bash中使用ACSII颜色;

\033[31mhello\033[0m

结构说明:
  \033[              起始控制符;
  \033[0m        结束控制符;
  hello               需要着色的字符串实体;
  31m                 前景色,着色为红色;

着色的具体结构写法:
  ##m           格式为前面2个数字,后面跟字母m;
             最左侧的数字#,有2个数字,分别代表不同意义:
                     数字’3′ : 表示对前景着色;
                     数字’4′ : 表示对背景着色;

            右侧的数字#,用1-7,共7个数字标识,表示具体的颜色;
                    数字’1′ : 红色;
                    数字’2′ : 绿色;
                    数字’3′ : 黄色;
                    数字’4′ : 蓝色;
                    数字’5′ : 紫色;
                    数字’6′ : 浅蓝色;
                    数字’7′ : 白色;

#m            只有一个数字,后面跟字母m,标识字体类型;
                  数字’1′ : 字体加粗;
                  数字’4′ : 字符串底部加横线;
                  数字’5′ : 字体闪烁;
                  数字’7′ : 白底黑字;

备注,前景色3#m,背景色4#m,字体类型#m,三者可混合使用;

~]#  echo  -e  “\033[31;47;1mhello,world.\033[0m\nhello,world.”                  白底红字加粗;

3、dialog命令(后续整理)

窗体控件;

默认,’dialog’命令输出信息被定向到了错误输出流;

Leave a Reply

Your email address will not be published. Required fields are marked *