• Shell脚本学习笔记(六)转向与陷阱


    转向

     

    文件代码:0,1,2,... <输入 >输出

    转向语义大部分不能单独使用,必须和Bash命令一起运用

     

    操作文件:

    fd<>文件 fd文件代码,可供读写

    fd<&- 关闭输入文件

    fd>&- 关闭输出文件

    n<&m 复制转向输入的文件代码m,存成文件代码n,使n连接至m

    n>&m 复制转向输出的文件代码m,存成文件代码n,使n连接至m

     

    一旦备份好标准输入后,就可以对标准输入进行操作,完毕后还原标准输入,如下:exec 0<&5 5<&-

     

    转向的用法:

    转向输入 fd<文件

    转向输出 fd>文件 set -o noclobber set -C 不覆盖 fd>|文件 强制覆盖

    转向附加 fd>>文件

    标准错误伴随标准输出做转向:&>文件 或 >&文件

     

    Here Document转向

    fd<<标记

    资料

    ...

    ...

    标记

    例子

     

    #!/bin/bash

    exec
    6<<EOF
    line1
    line2
    line3
    EOF

    while read
    <&6
    do
    echo $REPLY
    done

    结果

     

     

    陷阱触发

     

    在Script的执行过程中,有时候希望能实时处理系统传来的信号,如用户按了ctrl-c,处理的方式可分为两种:接受信号或忽略信号。前者通常会

    对信号安排执行特定的指令;后者主要想避免意外的状况干扰script的运行。像这种能捕捉特定信息,并作出反应的机制,称为trap(陷阱触发)

     

    ps auxw ps -ef

    查看系统定义的信号kill -l trap -l


     

    信号名称不区分大小写,在传递信号时可以使用数字代码,也可以使用信号名称。

     

    传递信号的方法

    使用内置命令kill

    kill -信号 进程编号

    kill -s 信号 进程编号

    kill -n 信号 进程编号

    kill后可以接多个进程编号,会把指定的信号都传送给这些进程。如果省略'-信号',则默认传送SIGTERM信号给进程。

    Killall -信号 进程名称

    例子

     

    #!/bin/bash

    for ((;1;))
    do
    sleep
    1
    done
    执行

     

    trap的运用

    语法

    trap '触发指令' 信号串行

    用途:向shell注册信号,只要系统产生此特定信号,trap就会触发,并执行trap命令中的“触发指令”

     

    trap – 信号串行

    用途:如果trap的语法中没有触发指令,而是-或空白,则可恢复信号串行原本的作用。如果曾使用trap对某些信号做过其他安排,那么在script结束前都会再用trap恢复他们原本的作用。

     

    trap '' 信号串行

    用途:忽略系统发出的“信号串行”,不做任何发应。

    killstop这两个信号无法用trap捕获,也无法忽略。

     

    trap -p

    用途:列出目前trapshell注册的信号列表

  • 相关阅读:
    spring mvc velocity多视图
    ubuntu 的远程桌面
    nhibernate 3.3 linq扩展
    MongoDB资料汇总专题[转发]
    SQLServer 2008 删除、压缩日志
    VS2012和2010 设置framework版本
    引用的程序集 没有强名称
    Xamarin for OSX – SetUp
    Xamarin devexpress datagrid 样式
    Xamarin devexpress Grid
  • 原文地址:https://www.cnblogs.com/njucslzh/p/1985924.html
Copyright © 2020-2023  润新知