美文网首页
bash cheat book

bash cheat book

作者: nil_ | 来源:发表于2016-07-20 15:30 被阅读0次

    index

    变量&常量

    1. 引用时加上 $ 符号( 第一次赋值及在For循环的头部不用$符号 )
    2. BASH 中没有浮点,可借助awk
    #!/bin/bash
    
    # = 周围不能有空格
    x=2015
    
    name="lbk"
    readonly name
    
    #删除变量,不能删只读
    unset x
    
    # 字符串
    # 单引号不会转义
    # 双引号可以转义,可以有变量
    echo "hellow ,${name}"
    # 长度
    echo ${#name}
    # 截取 0 开始
    echo ${name:1:2}
    
    其它操作可以用 re  or awk
    re='abc[A-Z]*.2'
    [[ $stringZ =~ $re ]] && echo ${#BASH_REMATCH}
    

    局部变量

    #!/bin/bash
    HELLO=Hello
    function hello {
      local HELLO=World
      echo $HELLO
    }
    

    local HELLOHELLO是独立的

    数组

    # 空格隔开
    array_name=(1 2 3)
    echo ${array_name[0]}
    # all element
    echo ${array_name[@]}
    
    # 取元素个数
    len=${#array_name[@]}
    # 或者
    len=${#array_name[*]}
    # 取单个元素的长度
    len=${#array_name[n]}
    

    运算

    #let "x = $x + 1" 或者 x=`expr $x + 1`  注意引号,推荐给变量加{}
    let "x = ${x} + 1"
    x="current year is"$x
    echo $x
    

    算术运算符

    运算符 说明 举例
    + 加法 expr $a + $b
    - 减法 expr $a - $b
    * 乘法 expr $a \* $b
    / 除法 expr $b / $a
    % 取余 expr $b % $a
    = 赋值 a=$b
    == 比较两个数字 [ $a == $b ]
    != 比较两个数字 [ $a != $b ]

    关系运算符

    只支持数字,不支持字符串,除非字符串的值是数字。

    运算符 说明
    -eq 相等
    -ne 不相等
    -gt >
    -lt <
    -ge >=
    -le <=

    字符串运算符

    运算符 说明 举例
    = 相等
    != 不相等
    -z len = 0 [ -z $a ]
    -n len > 0 [ -n $a ]
    str 空返回 true [ $a ]

    文件测试运算符

    操作符 说明
    -b file 是否是块设备文件,是,则返回 true。
    -c file 是否是字符设备文件,是,则返回 true。
    -d file 是否是目录,是,则返回 true。
    -f file 是否是普通文件(既不是目录,也不是设备文件),是,则返回 true。
    -g file 是否设置了 SGID 位,是,则返回 true。
    -k file 是否设置了粘着位(Sticky Bit),是,则返回 true。
    -p file 是否是具名管道,是,则返回 true。
    -u file 是否设置了 SUID 位,是,则返回 true。
    -r file 是否可读,是,则返回 true。
    -w file 是否可写,是,则返回 true。
    -x file 是否可执行,是,则返回 true。
    -s file 是否为空(文件大小是否大于0),不为空返回 true。
    -e file 检测文件(包括目录)是否存在,是,则返回 true。
    file1 -nt file2 file1 比 file2更新
    file1 -ot file2 file1 比 file2更老

    流程控制

    if

    if..then..fi statement (Simple If)
    if..then..else..fi statement (If-Else)
    if..elif..else..fi statement (Else If ladder)
    if..then..else..if..then..fi..fi..(Nested if)

    i=5
    if [ $i -gt 1 ];then
      echo '>1'
    elif [ %i -eq 1 ];then
      echo '=1'
    else
      echo '<1'
    fi
    

    for

    for i in 1 2 3
    do
        echo $i
    done
    #循环文件list
    for file in `ls /etc`
    

    如果for后面没有in [list]部分,则将遍历命令行的所有参数

    while

    while [ condition ]
    do
      statments
    done
    

    until

    until [ condition ]
    do
      statments
    done
    

    case

    echo "pls input sth"
    read var
    #字符变量用引号包起来
    case "$var" in
      [a-z] ) echo "小写";;
      [A-Z] ) echo "大写";;
      [0-9] ) echo "数字";;
      [yY][eE][sS] ) echo "Your input is YES" ;;
      [nN][oO] ) echo "Your input is no" ;;
      * ) echo "呵呵。。";;
    esac
    
    

    break/continue

    C lang

    函数

    function my_funcname {
      code block
    }
    
    或者
    
    my_funcname() {
      code block
    }
    

    函数参数 $1 $2...
    函数的返回值 $?

    square() {
        re='^[0-9]+$'
        if ! [[ $1 =~ $re ]] ; then
             echo "error: Not a number"; exit 1
        fi
        let "res = $1 * $1"
        return $res
    
    }
    
    square $1
    echo $?
    
    

    输入参数

    参数处理 说明
    $n 1...n
    $# 参数个数
    $@ 始终把每个参数单独输出
    $* 使用引号时 "$*"作为单一字符串
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的ID号
    $- 显示Shell使用的当前选项,与set命令功能相同。
    $? 最后命令的退出状态。0 没错误,其他任何值表明有错误。

    输入输出

    文件描述符: 0 标准输入(STDIN),1 标准输出(STDOUT),2 是标准错误输出(STDERR)

    命令 说明
    command > file 输出重定
    command < file 输入重定
    command >> file 将输出以追加的方式重定向到 file。
    n > file 将文件描述符为 n 的文件重定向
    n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
    a >& b 将输出合并
    a <& b 将输入合并
    << tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
    # 只有标准输出
    ls -al > STDOUT
    # 2 表示只有错误重定向
    ls -al 2> STDERR
    # 标准错误输出和标准输出
    ls -al > out_err 2>&1
    # 丢弃输出
    ls -al > STDOUT > /dev/null
    ls -al > STDOUT 2>&-
    

    echo

    echo -e "OK! \n" # -e 开启转义 \n 换行
    echo -e "OK! \c" # \c 不换行
    echo '$1'
    

    bash快捷键

    关于bash在控制台下的快捷键

    CMD 解释
    ctrl+u 删除光标以前的所有字符
    ctrl+d 删除光标以前的一个字符
    ctrl+k 删除光标以后的所有字符
    ctrl+h 删除光标以后的一个字符
    ctrl+t 调换光标前两个字符的次序
    ctrl+a 移动光标到最前面
    ctrl+e 移动光标到最后面
    ctrl+p 上一个命令
    ctrl+n 下一个命令
    ctrl+s 锁定输入
    ctrl+q 解除锁定
    ctrl+f 移动光标到后一个字符
    ctrl+b 移动光标到前一个字符
    ctrl+x 标记一个位置
    ctrl+c 清除当前的输入

    正则表达式

    字符 功能
    ^ 置于待搜索的字符串之前,匹配行首的字
    $ 置于待搜索的字符串之后,匹配行末的字
    < 匹配一个字的字头

    匹配一个字的字尾
    . 匹配任意单个正文字符
    [str] 匹配字符串 str 中的任意单个字符
    [^str] 匹配不在字符串 str 中的任意单个字符
    [a-c] 匹配从 a 到 c 之间的任一字符

    • 匹配前一个字符的 0 次或多次出现
      忽略特殊字符的特殊含义,将其看作普通字符

    扩充的特殊字符:
    字符 功能

    • 重复匹配前一项 1 次以上
      ? 重复匹配前一项 0 次或 1 次
      {j} 重复匹配前一项 j 次
      {j, } 重复匹配前一项 j 次以上
      {, k} 重复匹配前一项最多 k 次
      {j, k} 重复匹配前一项 j 到 k 次
      s | t 匹配 s 或 t 中的一项
      (exp) 将表达式 exp 作为单项处理

    相关文章

      网友评论

          本文标题:bash cheat book

          本文链接:https://www.haomeiwen.com/subject/nkumjttx.html