变量使用
    echo $a
    echo ${b}
    echo "$a"
    使用$var或${var}来访问变量。后者更为严谨。$var_x ${var}_x 是不同的。
    变量不需要定义也可以使用。引用未定义的变量,默认为空值。

    数组变量
    array=(1 3 4 6)
    array=(``、``ls``、)
    echo ${array[2]}
    echo ${array[*]}
    echo ${#array[*]}
    使用0来定义数组变量,中间使用空格隔开

    特殊符号的使用
    双引号用于括起一段字符串值,支持$var形式的变量替换
    单引号也表示其内容是字符串值,不支持转义
    \反斜线,某些情况下表示转义
    ((a=a+3))是整数扩展。把里面的变量当作整数去处理。
    {1..10}等价于seq 1 10,表示1到10
    seq 1 3 10表示生成一个1到10,步进为3

    变量类型
    字符串a=”xx”
    数字 i=1314
    布尔 a=true b=false

    字符串操作
    取值
    ${value:offset} ${value:offset:length}从变量中提取子串
    ${#value}字符串长度
    ${#array[]}和${#array[@]}表示数组中元素的个数
    *掐头去尾与内容替换

    ${value#pattern} ${value##pattern} #表示掐头
    ${value%pattern} ${value%%pattern} %表示去尾
    ${value/pattern/string} ${value//pattern/string} / 表示替换
    #与## %与%% /与//的区别:最短匹配模式VS最长匹配模式
    ${var/#Pattern/Replacement} ${var/%Pattern/Replacement}

    算术判断
    [ 2 -eq 2 ]相等
    [ 2 -ne 2 ]不等
    [ 3 -gt 1 ]大于
    [ 3 -ge 3 ]大于等于
    [ 3 -lt 4 ]小于
    [ 3 -le 3 ]小于等于
    (())也可以表示算术比较o ((10>=8)),((10==10))

    字符串⽐较
    [ string1 = string2 ] 如果两字符串相同,则结果为真
    [ string1 != string2 ] 如果两字符串不相同,则结果为真
    [ -n “$var” ] 如果字符串不是空,则结果为真
    [ -z “$var” ] 如果字符串是空,则结果为真
    [[ “xxxx” == x* ]] 在表达式中表⽰0或者多个字符
    [[ xxx == x?? ]] 在表达式中表⽰单个字符

    在引⽤变量的时候要记得加双引号[ -z “$a”] 否则当a未定义时会语法报错

    逻辑判断
    [ 2 -ge 1 -a 3 -ge 4 ];echo $?与
    [ 2 -ge 1 -o 3 -ge 4 ];echo $?或
    [[ 2 -ge 1 && 3 -ge 4 ]];echo $?与
    [[ 2 -ge 1 II 3 -ge 4 ]];echo $?或
    [ ! 2 -ge 1 ];echo $?非

    内置判断
    -e file如果文件存在,则结果为真
    -d file如果文件是一个子目录,则结果为真
    -f file如果文件是一个普通文件,则结果为真
    -r file如果文件可读,则结果为真
    -s file如果文件的长度不为0,则结果为真
    -w file如果文件可写,则结果为真
    -x file如果文件可执行,则结果为真
    [[]]是[]的扩展语法,在老的sh里并不支持。推荐用[]

    逻辑控制
    条件if
    分支case
    循环 for while until select
    Break 和 continue
    有生之年也许你只需要用到if、for、while

    if结构
    if [ condition ] ;then
    if [ condition ] ;then …;else …;fi
    if [ condition ] ;then …;elif …;fi
    简单的逻辑可以使用&& ||去替代
    条件可以用命令返回值代替

    For循环
    for(( cl ; c2 ; c3 ));
    do
    …;
    done

    for((i=0;i<10;i++));do echo $i;done

    While循环
    i=0;while [ $i -lt 3 ] ;
    do echo $i;
    ((i=i+1));done
    一个有用的小技巧。一行行的读取文件内容
    while read line;
    do echo $line;
    done < /tmp /tmp