zoukankan      html  css  js  c++  java
  • Bash编程(1) 基础

    1. 基本知识

    (1) $HOME: 当前用户的家目录

    (2) `pwd`或$PWD:当前目录

    (3) 脚本命名避免使用test,通过type -a test,可以查看所有匹配test的命令

    gas@docker86-22:~$ type test
    test is a shell builtin
    gas@docker86-22:~$ type -a test
    test is a shell builtin
    test is /usr/bin/test

     (4)  脚本中应包含作者、时间、命令描述等信息。脚本第一行必须以"#!"开头,告诉系统将使用哪个编译器执行该脚本。

    #!/bin/bash
    #: Title    : hw
    #: Date        : 2018-12-23
    #: Author    : "ws"<ws@qq.com>
    #: Version    : 1.0
    #: Description    : print Hello, World!
    #: Options    : None
    
    printf "%s
    " "Hello, World!"

     2. 输入、输出和吞吐量

    (1) 命令行中的参数可作为标记参数,如第一个参数$1,第二个参数$2

    例:扩展hw脚本,打印第一个参数内容

    #!/bin/bash
    #: Title    : hello
    #: Date        : 2018-12-23
    #: Author    : "ws"<ws@qq.com>
    #: Version    : 1.0
    #: Description    : print Hello and the first command-line argument
    #: Options    : None
    
    printf "Hello, %s
    " "$1"

     例:如果脚本中增加shift命令,表示标记参数进行移位,shift的值默认值为1,也可以通过shift N进行设置

    #!/bin/bash
    #: Title    : hello
    #: Date        : 2018-12-23
    #: Author    : "ws"<ws@qq.com>
    #: Version    : 1.0
    #: Description    : print Hello and the first command-line argument
    #: Options    : None
    
    shift 3
    printf "Hello, %s
    " "$1"

     运行: hello 1 2 3 4,结果为:Hello, 4,即当执行了shift 3后,第四个参数将会变为原来的第一个参数。

    注意:shift命令执行后不可逆转,被忽略的参数无法被再次检索

    (2) 特殊参数

    1) $#表示标记参数的个数

    2) $@表示所有的标记参数

    3) $0表示脚本名称

    4) $$表示当前进程的pid

    5) $?表示最后一行执行命令的返回码

    6) $_表示最后一个参数

    (3) echo少使用,多使用printf

    echo -e参数可以识别转义字符,echo -n参数不识别转义字符。

    printf表示按指定格式打印数据。格式为:printf FORMAT ARG ...。FORMAT可以包含普通字符,转义序列和特殊格式

    转义序列包含:

    转义序列 说明
    a 警报
     回退
    e 转义字符
    f 跳页
    换行符
    回车
    水平tab
    v 垂直tab
    \ 反斜线
    nn 八进制字符
    xHH 十六进制字符

    例:

    printf "Q	141
    x42
    "
    Q    a
    B

     例:当参数多于说明符时,格式字符串将被重用,直到所有参数都被使用

    $ printf "%s
    " Print arguments on "separate	lines" # %s不会进行转义
    Print
    arguments
    on
    separate	lines
    $ printf "%b
    " Print arguments on "separate	lines" # %b会进行转义
    Print
    arguments
    on
    separate    lines
    $ printf "%d
    " 23 45 56.78 0xff 011 # %d表示整型
    23
    45
    -su: printf: 56.78: invalid number # 当不符合整型时,会报异常
    56
    255
    9
    $ printf "%f
    " 12.34 23 56.789 1.2345678 # %f表示浮点型,默认保留6位小数
    12.340000
    23.000000
    56.789000
    1.234568
    $ printf "%e
    " 12.34 23 56.789 123.45678 # 科学计数法显示
    1.234000e+01
    2.300000e+01
    5.678900e+01
    1.234568e+02
    $ printf "color: #%02x%02x%02x;
    " 65 105 225 # 十六进制
    color: #4169e1;

     例:按指定宽度展示

    $ printf "%8s %-15s:
    " first second third fourth fifth sixth # %8s表示在字符前有8个空格,%-15s表示在字符串后有15个空格
       first second         :
       third fourth         :
       fifth sixth          :
    $ printf "%04d
    " 12 23 56 123 255 # %04d表示当4位数不够时,以0开头补齐4位
    0012
    0023
    0056
    0123
    0255
    $ printf "%12.4s %8.2f
    " John 2 Jackson 4.579 Walter 2.9 # %8.2f表示精确到2位浮点数
            John     2.00
            Jack     4.58
            Walt     2.90

     例:打印到变量中

    $ printf -v num4 "%04d" 4
    $ printf "%s
    " "$num4"
    0004

     (4) stdin, stdout, stderror

    $ printf "%s
    %v
    " OK? Oops! > FILE 2> ERRORFILE; # 标准输出 ">"重定向到 FILE,错误输出"2>"重定向到ERRORFILE
    $ printf "%s
    %v
    " OK? Oops! 2> /dev/null  # 标准错误输出到 /dev/null
    OK?
    $ printf "%s
    %v
    " OK? Oops! > FILE 2>&1 # 将标准输出和错误输出重定向到同一个文件
    $ printf "%s
    %v
    " OK? Oops! 2>&1 > FILE # 注意顺序很重要
    -su: printf: `v': invalid format character
    $ printf "%s
    %v
    " OK? Oops!  &> FILE # bash提供了将标准输出和标准错误输出到相同位置的方法 =>  &>

     将exec 1>tempfile, exec 0<datafile, exec 2>errorfile写入脚本开始位置,则运行脚本时所有的标准输出都会写入tempfile,输入将从datafile中读取,错误异常都会写入errorfile中

    #!/bin/bash
    
    exec 1>tempfile
    exec 0<datafile
    exec 2>errorfile
    
    printf "Hello, $1"
    abc test

     (5) read命令

    用于读取标准输入。读取多个变量时,第一个值赋值给第一个变量,第二个值赋给第二个变量,若有剩余的值将全部赋值给最后一个变量

    $ read a b c d
    Jan Feb Mat Apr May June Jul Aug   
    $ echo $a
    Jan
    $ echo $b
    Feb
    $ echo $c
    Mat
    $ echo $d
    Apr May June Jul Aug
    
    read var < FILENAME # 文件输入作为读取的变量

     (6) Pipeline管道

    tee命令用于读取标准输入,并写入一个或多个文件中,以及标准输出中。$RANDOM是bash自带变量

    $ printf "%s
    " "$RANDOM" "$RANDOM" | tee FILENAME
    $ cat FILENAME 
    16482
    6815

     (7) 命令替换

    常见两种格式:date=`date`; date=$( date )。需要注意针对外部命令有效,使用内置命令执行时将会较慢

  • 相关阅读:
    redux dispatch、action、reduce 执行流程
    react中使用react-redux
    npm 全局安装默认地址
    react 组件外js文件路由跳转
    withRouter的作用和适用场景
    react 自定义高阶组件,实现路由拦截,子路由渲染
    移动端原生js使用touch事件监听滑动方向
    Vue.js中this.$nextTick()的使用与理解
    域名等级划分介绍
    nodejs 实现一个账号只能一台设备登录
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/10163817.html
Copyright © 2011-2022 走看看