• 摘自《Linux与unix shell编程指南》


    shift运行后,$#随之减少;
    如果需要知道命令行中输入的最后一个参数(通常是一个文件名),可以有两种选择:使用命令 eval echo $$#;使用shift命令:shift 'expr $# - 2'。


    getopts 选项字符串 名称 [参数表]
    每次使用时,getopts 都会把下一个选项放在shell变量名称中(如果名称不存在就初始化它),并把下一个要处理的参数的下标放在变量 OPTIND 中。如果某个选项需要参数,getopts 就把该参数放在变量 OPTARG 中。Shell不会自动把 OPTIND 重置;如果在同一个shell中多次调用 getopts 时要使用新的参数,则必须手动重置它。处理完选项结尾时,getopts 会退出并返回一个大于零的状态;OPTIND 会指向第一个非选项参数的下标;而名称被设为“?”.getopts 可以通过两种方式报错。如果选项字符串的第一个字符是冒号,则忽略报错;正常情况下,如果遇到无效选项,或者忽略了选项的参数,就会打印诊断信息。如果遇到了无效的选项,getopts 就会在名称里面放入"?"。这时如果不忽略报错,就打印一条错误信息并重置 OPTARG;如果忽略报错,就把该选项放在 OPTARG 中而不打印错误信息。如果某个必要参数没有找到,并且 getopts 没有忽略报错,则在名称中放入问号"?" 并重置 OPTARG且打印错误信息。如果getopts 忽略错误,则在名称中放入冒号":",并把 OPTARG 设为找到的选项字符。

    getopts一般格式为:
    getopts option_string variable
    在上述例子中使用脚本:
    while getopts ahfgv OPTION


    getopts查看所有以连字符开头的参数,将其视为选项,如果输入选项,将把这与option_string对比,如果匹配发现,变量设置为OPTION,如果未发现匹配字符,变量能够设置为?。重复此处理过程直到选项输入完毕。

    错误信息提示并不明确,因此可以用自己的反馈信息屏蔽它,方法如下:
    将冒号放在 option_string开始部分。
    while getopts :ahfgvc: OPTION
    在case语句里使用?创建一可用语句捕获错误。


    shift `expr $OPTIND - 1`
    if [ $# = 0]
    then
    .....


    : [参数]
    除了扩展参数和执行重定向外不做任何操作。返回状态是零。
    : ${ANS:=$DEFAULT}

    HOLD=HOLD.$$
    grep -v $CODE $DBFILE >$HOLD

    vi中,在命令模式下 :set nu显示行号。

    set -n 读命令但并不执行。
    set -v 显示读取的所有行。
    set -x 显示所有命令及其参数。
    将set选项关闭,只需用 +替代-。有人总认为+应该为开,而-应为关闭,但实际刚好相反。可以在脚本开始时将 s e t选项打开,然后在结束时关闭它。或在认为有问题的特殊语句段
    前后打开及关闭它。
    set可以用来改变shell选项或者设置位置参数,也可以显示shell变量的名称和值。
    -n 读取命令但不执行。这可以用来检查脚本的语法。在交互式的shell中,这个选项会被忽略掉。助记词: No-execution, 不执行
    -v 在shell读取输入行时把它打印出来。助记词:Verbose, 详细
    -x 对于简单命令,for 命令,case 命令,select 命令,命令与其参数或者关联的单词列表里面的算术运算,则在扩展以后、执行之前,打印跟踪信息。在打印命令及其扩展过的参数之前,先打印扩展后的 PS4 变量。助记词: X, 跟踪

    /usr/local/sybin/syb_backup >>$log_f 2>&1 <<MAYDAY
    2
    3
    Y
    MAYDAY
    <<MAYDAY之后的内容就是手工运行syb_backup脚本所需要输入的内容,直到遇到另外一个MAYDAY结束。

    最常用的信号及它们的含义。
    信号 信号名 含义
    1 SIGHUP 挂起或父进程被杀死
    2 SIGINT 来自键盘的中断信号,通常是 <CTRL-C>
    3 SIGQUIT 从键盘退出
    9 SIGKILL 无条件终止
    11 SIGSEGV 段(内存)冲突
    15 SIGTERM 软件终止(缺省杀进程信号)
    还有信号0,我们前面在创建.logout文件时已经遇到过。该信号为“退出shell”信号。为了发出信号0,只要从命令行键入exit,或在一个进程或命令行中使用<CTRL-D>即可。

    trap [-lp] [参数] [信号指示]
    当shell接收到信号指示中的信号时,就会读取和执行参数中指定的命令。如果省略了参数(这时只有一个信号指示)或者参数是"-",则每个指定信号的处理都重置为shell启动时的值。如果参数是空字符串,则shell及它所启动的命令会忽略每个信号指示指定的信号。
    trap可以使你在脚本中捕捉信号。该命令的一般形式为:
    trap name signal(s)
    其中,name是捕捉到信号以后所采取的一系列操作。实际生活中,name一般是一个专门用来处理所捕捉信号的函数。Name需要用双引号( ”“ )引起来。 Signal就是待捕捉的信号。也可以使用单引号来代替双引号;其结果是一样的。


    可以使用logger命令向/var/log/syslog发送消息:
    bai@bbox:~$ ll /var/log/syslog
    -rw-r----- 1 syslog adm 730 1月 29 23:17 /var/log/syslog
    bai@bbox:~$ logger "sdfsfsf"
    bai@bbox:~$ ll /var/log/syslog
    -rw-r----- 1 syslog adm 764 1月 29 23:50 /var/log/syslog
    bai@bbox:~$ tail -10 /var/log/syslog
    Jan 29 19:07:05 bbox rsyslogd: [origin software="rsyslogd" swVersion="5.8.6" x-pid="619" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
    Jan 29 19:08:54 bbox anacron[1108]: Job `cron.daily' terminated
    Jan 29 19:08:54 bbox anacron[1108]: Normal exit (1 job run)
    Jan 29 19:17:01 bbox CRON[2898]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
    Jan 29 20:17:01 bbox CRON[3166]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
    Jan 29 21:17:01 bbox CRON[3384]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
    Jan 29 22:17:01 bbox CRON[3534]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
    Jan 29 23:17:01 bbox CRON[3786]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
    Jan 29 23:50:27 bbox bai: sdfsfsf
    bai@bbox:~$

    #save tty settings and hide characters typed in
    SAVEDTTY=`stty -g`
    stty -echo
    ....
    stty $SAVEDTTY

    -----待续

  • 相关阅读:
    csp-2020-s游记
    线性DP
    tarjan无向图
    tarjan有向图
    树前置知识普及
    hash
    可持久化线段树&主席树
    [HAOI 2015] 树上染色
    [Contest on 2020.11.24] Beetle
    [Contest on 2020.11.24] Candy
  • 原文地址:https://www.cnblogs.com/baiyw/p/3553212.html
Copyright © 2020-2023  润新知