zoukankan      html  css  js  c++  java
  • Shell脚本笔记

     
    如何查询文件里的某个字符串?
    grep “字符串” 文件
    例:grep "abc" tmp.txt
     
    如何将查询出来的内容赋给变量?
    str=$(grep "abc" tmp.txt) 
     
    如何打印变量的值?
    echo $varname
    注:要想引用变量,最好写成${varname}的形式
     
    如何在屏幕上输出提示,让用户输入y或n来选择进行下一步?
    echo -n "Continue?"
    read ANS
    case $ANS in
    y|Y|yes|Yes)
        要执行的语句
        ;;
    n|N|no|No)
        exit 0
        ;;
    esac
    注:read从标准输入中读取一行,并把输入行的每个字段的值指定给shell变量。
     
    如何将命令在屏幕输出的同时也写入文件?
    命令 | tee 文件
    或:
    your_script.sh 2>&1 | tee 文件
     
    如何让光标在屏幕上显示在命令之后的位置而不是下一行?
    echo -n “命令”是取消echo之后自带的换行符
     
    如何启用控制字符?
    echo -e “a b c d e f”
     
    如何注释多行代码?
    :<<COMMENT
        要注释的code
    COMMENT
    或在vim中,:50,70 s/^/#可注释从50行到70行的内容
     
    如何不执行脚本,只检查语法?
    sh -n your_script
     
    如何调试?
    sh -x your_script
    会显示所有变量,并执行脚本
     
    如何产生随机数?
    a=RANDOM
    echo $a
     
    注意:
    无论有多少缩进,EOT一定要顶格写。
    等号两边不能有空格。
    if [ xxx ]; then xxxx; fi 括号和内容之间必须有一个空格。
    调用函数只是fun,没有括号与分号。
    shell中的一切变量都是字符串类型。
    变量多于一个单词的话,必须用双引号。
    显示特殊字符,比如就想显示$a,可用单引号。
    局部变量必须以local声明。全局变量没有什么修饰。
    所有写入/dev/null的信息都消失了,不会保存在磁盘里。如果将标准输出和错误重定向到/dev/null,就能让终端闭嘴。
    类似于/dev/null,/dev/zero也是个伪文件,会产生一个null流,是二进制的0流。
    输出到/dev/tty的信息只会显示在当前工作的终端显示器上。
    $#代表传入函数的参数个数,$@代表所有参数
    0 表示标准输入,1 表示标准输出,2 表示错误输出
    为了展示一段memu以供客户选择,可以使用select关键字
     
    【截取字符串】

    截取要求中的“最左”与“最右”
    注意:pattern只能是从最左开始匹配,如果不包含第一个字符,那么就不能工作。
    ${variable#pattern} - 截去从最左开始匹配的最短符合pattern的子串
    ${variable##pattern} - 截去从最左开始匹配的最长符合pattern的子串

    ${variable%pattern} - 截去从最右开始匹配的最长符合pattern的子串
    ${variable%%pattern} - 截去从最右开始匹配的最长符合pattern的子串

    例如:
    variable="Now is the time"
    echo ${variable} // 打印出 Now is the time
    echo ${variable#N*i} // 打印出 s the time
    echo ${variable##N*i} // 打印出 me
    echo ${variable%time} // 打印出 Now is the
    echo ${variable%%t*e} // 打印出 Now is

    语法:${variable:offset:length}
    例如:
    var="hello"
    var=${var:3:2}
    echo $var //打印出 "lo"

     

    【SHELL特殊的元字符】
    *(pattern1|pattern2) 0次或者多次触发
    例如,*([0-9]) 0个或者多个数字
    ?(pattern1|pattern2) 0次或者1次触发
    例如,?([0-9]) 0个或者1个数字
    +(pattern1|pattern2) 1次或者多次触发
    @(pattern1|pattern2) 仅仅1次触发
    !(pattern1|pattern2) 1次都不触发
    例如,!(err*|fail*)表示,不能以“err”或者"fail"开头的词

    【保留变量】

    $IFS  这个变量中保存了用于分割输入参数的分割字符,默认识空格。
    $HOME  这个变量中存储了当前用户的根目录路径。
    $PATH  这个变量中存储了当前 Shell 的默认路径字符串。
    $PS1  表示第一个系统提示符。
    $PS2  表示的二个系统提示符。
    $PWD  表示当前工作路径。
    $EDITOR 表示系统的默认编辑器名称。
    $BASH  表示当前 Shell 的路径字符串。
    $0, $1, $2, ... 表示系统传给脚本程序或脚本程序传给函数的第0个、第一个、第二个等参数。
    $#   表示脚本程序的命令参数个数或函数的参数个数。
    $$   表示该脚本程序的进程号,常用于生成文件名唯一的临时文件。
    $?   表示脚本程序或函数的返回状态值,正常为 0,否则为非零的错误号。
    $*   表示所有的脚本参数或函数参数。
    $@   和 $* 涵义相似,但是比 $* 更安全。
    $!   表示最近一个在后台运行的进程的进程号。


     

    【参考文献】

    Shell脚本调试技术 http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/index.html

    一个程序演示所有的shell编程知识 http://code.google.com/p/ldd6410/wiki/ShellScript

    Linux Shell Scripting Tutorial A Beginner‘s handbook  http://www.freeos.com/guides/lsst/

  • 相关阅读:
    eclipse下jsp文件报错解决方法
    使用vscode搭建本地的websocket
    tomcat的首次登录配置
    tomcat配置报错解决方法 The jre_home environment variable is not defined correctly
    cento升级openssl依旧显示老版本
    Centos6安装mysql5.7最新版
    Neutron服务组件
    网络OSI 7层模型
    Kubernetes的核心技术概念和API对象
    Xen 虚拟化技术
  • 原文地址:https://www.cnblogs.com/qyddbear/p/3440563.html
Copyright © 2011-2022 走看看