zoukankan      html  css  js  c++  java
  • Shell脚本编程基础笔记二

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8177697.html

    一:输入

     1:运行时参数

        可以在启动脚本时,在其后输入参数。

    ./脚本 参数1 参数2...

        bash中使用位置参数来接收启动时输入的参数:

    $0:程序名(脚本名)
    $1:第1个参数
    $2:第2个参数
    $3:第3个参数
    $4:第4个参数
    $5:第5个参数
    $6:第6个参数
    $7:第7个参数
    $8:第8个参数
    $9:第9个参数
    超过9个的,要加花括号来读取:
    ${10}:第10个参数 ......

      获取脚本名:

    $[basename $0] :不加basename的话,获取到的脚本名会包含路径

      特殊参数:

    $#:统计运行时参数个数
    $*:将所有运行时参数作为一个整体来取用
    $@:将所有运行时参数作为一个list返回,可以用for去遍历

     移动参数:

    shift :将运行时参数依次左移。即:$2赋值给了$1,而原来最左边的参数被移除,丢弃。
    shift n:将参数依次左移n个位置。
    用途:可以用于遍历参数列表,尤其是不知道参数有几个,参数比较多时。

    2:处理选项与参数

    getopts 格式 变量
    
    例如:
    while getopts ab:c opt
    do
        case "$opt" in
           a) ...
           b)
           c)....
        esac
    done 

    3:读取用户输入

    read var:读取用户输入,存到var中
    read -p "提示文本" var
    read -t 超时限制 var :防止超时
    read -s var:隐秘输入,用户输入在屏幕上不显示,多用于密

    4:从文件读取输入

    cat 文件 | while read line
    do
        每次line都保存了从文件中读取的一行数据,$line 就是当前次遍历读取到的内容。
    done

    二:输出

     1:脚本中重定向

    exec 1> 文件  :将标准输出重定向到某个文件
    echo ...
    echo ...
    echo ...   :这些语句的输出都写入了上述文件
    exec 0< 文件 :将输入重定向到了某个文件
    那么之后的 read 命令默认从上面文件读取数据

    2:阻止输出

    对于某些警报、报错、无用的信息,我们不想让用户看见:可以将他们输出重定向到  /dev/null   文件。

    3:向显示器和文件输出

    命令1 | tee 文件2 :将命令1的输出,重定向到显示器和文件2,覆盖
    命令1 | tee -a 文件2 :将命令1的输出,重定向到显示器和文件2,追加

    三:脚本控制

    1:信号控制

    信号种类:

    SIGHUP            终止进程    终端线路挂断
    SIGINT         终止进程    中断进程
    SIGQUIT       建立CORE文件   终止进程,并且生成core文件
    SIGILL          建立CORE文件      非法指令
    SIGTRAP       建立CORE文件      跟踪自陷
    SIGBUS        建立CORE文件      总线错误
    SIGSEGV      建立CORE文件      段非法错误
    SIGFPE         建立CORE文件      浮点异常
    SIGIOT         建立CORE文件      执行I/O自陷
    SIGKILL        终止进程    杀死进程
    SIGPIPE        终止进程    向一个没有读进程的管道写数据
    SIGALARM     终止进程    计时器到时
    SIGTERM       终止进程    软件终止信号
    SIGSTOP       停止进程    非终端来的停止信号
    SIGTSTP       停止进程    终端来的停止信号
    SIGCONT      忽略信号    继续执行一个停止的进程
    SIGURG        忽略信号    I/O紧急信号
    SIGIO           忽略信号    描述符上可以进行I/O
    SIGCHLD      忽略信号    当子进程停止或退出时通知父进程
    SIGTTOU      停止进程    后台进程写终端
    SIGTTIN       停止进程    后台进程读终端
    SIGXGPU      终止进程    CPU时限超时
    SIGXFSZ      终止进程    文件长度过长
    SIGWINCH   忽略信号    窗口大小发生变化
    SIGPROF      终止进程    统计分布图用计时器到时
    SIGUSR1      终止进程    用户定义信号1
    SIGUSR2      终止进程    用户定义信号2
    SIGVTALRM  终止进程    虚拟计时器到时

    中断脚本运行:

    Ctrl+C

    暂停脚本:此时,作业被暂停,并且保留在内存中。我们可以在后面根据作业ID重启作业,继续运行。

    Ctrl+Z

    终止脚本:杀死进程。

    kill -9 作业ID

    捕捉信号并响应:

    可以使用trap命令来捕捉信号,当脚本在运行过程中检测到Linux信号时,执行相应的操作。

    trap 响应操作 要捕捉的信号
    
    例如:
    #!/bin/bash
    trap "禁止暂停!" SIGINT   #这样,在该脚本运行过程中,如果检测到Ctrl+C,则会显示 “禁止暂停!”,脚本会继续运行。
    ......其他代码

    移除捕获:

    trap -- 信号 :可以在脚本中的某一处,移除掉对信号的捕获

     2:后台运行脚本

    ./脚本.sh &  #:后台运行脚本,只需在后面加个  &  即可
    nohup ./脚本名.sh &   #:nohup阻断了所有发送给该进程的SIGHUP信号,这样在终端退出时也不影响进程的继续运行。

    3:作业控制

    查看作业:

    jobs   :查看当前shell正在处理的作业

    重启作业:前面我们使用Ctrl+Z暂停了作业,现在我们来重启它。

    bg 作业号     #在后台重启一个作业
    fg  作业号     #在前台重启一个作业  

     作业的谦让度:对CPU的谦让使用度

    nice -n 谦让度 ./脚本名   :在启动脚本时指明谦让度,谦让度由  -20 ~ +19
    renice -n 新谦让度 -p 进程id  :更改作业谦让度

    4:计划作业

    定时运行:

    at -f 脚本文件 time  :在time执行脚本文件

    定时作业的输出:

    定时作业默认将作业结果通过电子邮件发送。我们可以在运行的脚本文件中重定向输出到具体的文件。

    查看等待中的定时作业:

    atq

    删除等待中的作业:

    atrm 作业号

    5:周期性作业

    需要脚本在每天同一时刻、每月、每周等等周期性执行,可以使用cron程序。

    查看cron表:

    crontab -l

    添加cron任务:

    crontab -e
    此时进入文本编辑器,添加条目。
    定时条目的格式为:min hour day month dayOfweek command #一条条目制定了在 周几、某月某日某时某分 执行某指令
  • 相关阅读:
    C# 基本数据类型
    java二进制,原码、反码、补码、位运算
    .net邮件发送[c#]
    linux软件安装命令
    VB.net实现从ListView控件中异地获取文本内容源代码
    VB获得进程PID
    任意组合指令达到免杀
    免杀之等价替换法
    ASP技巧base64编码、解码函数
    看到一个思路新颖的下载者制作法
  • 原文地址:https://www.cnblogs.com/ygj0930/p/8177697.html
Copyright © 2011-2022 走看看