• Linux shell 脚本总结


    在中括号中,判断变量的值, 加不加双引号的问题?

    -z 判断 变量的值,是否为空; zero = 0

    - 变量的值,为空,返回0,为true

    - 变量的值,非空,返回1,为false

    -n 判断变量的值,是否为空 name = 名字

    - 变量的值,为空,返回1,为false

    - 变量的值,非空,返回0,为true

    [ -z "$pid" ] 单对中括号变量必须要加双引号

    [[ -z $pid ]] 双对括号,变量不用加双引号

    [ ] 可以使用 -a -o的参数,但是必须在 [ ] 中括号内,判断条件,例如:

    [ 5 -lt 3 -o 3 -gt 2 ] 或者条件成立

    如果想在中括号外判断两个条件,必须用&& 和 || 比较

    [5 -lt 3 ] || [ 3 -gt 2]

    [5 -gt 3 ] && [ 3 -gt 2] 成立

    当判断某个变量的值是否满足正则表达式的时候,必须使用[[ ]] 双对中括号

     条件表达式

    文件表达式

    if [ -f  file ]    如果文件存在
    if [ -d ...   ]    
    如果目录存在
    if [ -s file  ]    
    如果文件存在且非空 
    if [ -r file  ]    
    如果文件存在且可读
    if [ -w file  ]    
    如果文件存在且可写
    if [ -x file  ]    
    如果文件存在且可执行   

    整数变量表达式

    if [ int1 -eq int2 ]    如果int1等于int2   
    if [ int1 -ne int2 ]    
    如果不等于    
    if [ int1 -ge int2 ]       
    如果>=
    if [ int1 -gt int2 ]       
    如果>
    if [ int1 -le int2 ]       
    如果<=

    if [ int1 -lt int2 ]       如果<

    字符串变量表达式

    If  [ $a = $b ]                 如果string1等于string2
                                    
    字符串允许使用赋值号做等号
    if  [ $string1 !=  $string2 ]   
    如果string1不等于string2       
    if  [ -n $string  ]             
    如果string 非空(0),返回0(true)  
    if  [ -z $string  ]             
    如果string 为空
    if  [ $sting ]                  
    如果string 非空,返回0 (-n类似)    

    shell脚本字符串截取的8种方法

    假设有变量 var=http://www.aaa.com/123.htm.

    1. # 号截取,删除左边字符,保留右边字符。

    1

    echo ${var#*//}

     其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
    即删除 http://
    结果是www.aaa.com/123.htm

    2. ## 号截取,删除左边字符,保留右边字符。

    1

    echo ${var##*/}

       

    ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
    即删除 http://www.aaa.com/

    结果是 123.htm

    3. %号截取,删除右边字符,保留左边字符

    1

    echo ${var%/*}

       

    %/* 表示从右边开始,删除第一个 / 号及右边的字符

    结果是:http://www.aaa.com

    4. %% 号截取,删除右边字符,保留左边字符

    1

    echo ${var%%/*}

     %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
    结果是:http:

    5.
    从左边第几个字符开始,及字符的个数

    1

    echo ${var:0:5}

       

    其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
    结果是:http:

    6. 从左边第几个字符开始,一直到结束。

    1

    echo ${var:7}

       

    其中的 7 表示左边第8个字符开始,一直到结束。
    结果是www.aaa.com/123.htm

    7. 从右边第几个字符开始,及字符的个数

    1

    echo ${var:0-7:3}

       

    其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
    结果是:123

    8. 从右边第几个字符开始,一直到结束。

    1

    echo ${var:0-7}

       

    表示从右边第七个字符开始,一直到结束。
    结果是:123.htm

    注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)

    数组的操作

    定义

    数值类型的数组:一对括号表示数组,数组中元素之间使用"空格"来隔开。

      举个列子

      arr_number=(1 2 3 4 5);

      字符串类型数组:同样,使用一对括号表示数组,其中数组中的元素使用双引号或者单引号包含,同样使用"空格"来隔开。

      arr_string=("abc" "edf" "sss"); 或者 arr_string=('abc' 'edf' 'sss');

    操作

    我们使用数值类型数组arr_number=(1 2 3 4 5)做为源数组进行相关的讲解:获取数组长度,读取某个下标的值,对某个下标赋值,删除、分配和替换以及遍历。提一个知识点,我们在shell里面想获取某个变量的值,使用$符开头,如:$a或者${a}即可。

      获取数组长度

      arr_length=${#arr_number[*]}${#arr_number[@]}均可,即形式:${#数组名[@/*]} 可得到数组的长度。

      读取某个下标的值

      arr_index2=${arr_number[2]},即形式:${数组名[下标]}

      对某个下标赋值

      这里需要提出两个问题:

        第一个问题是如果该下标元素已经存在,会怎么样?

        答:会修改该下标的值为新的指定值。

        例如:arr_number[2]=100,数组被修改为(1 2 100 4 5)

        第二个问题是如果指定的下标已经超过当前数组的大小,如上述的arr_number的大小为5,指定下标为10或者11或者大于5的任意值会如何?

        答:新赋的值被追加到数组的尾部。

        例如:arr_number[13]=13,数组被修改为(1 2 100 4 5 13)

      删除操作

        清除某个元素:unset arr_number[1],这里清除下标为1的数组;

        清空整个数组:unset arr_number;

      分片访问

        分片访问形式为:${数组名[@*]:开始下标:结束下标},注意,不包括结束下标元素的值。

        例如:${arr_number[@]:1:4},这里分片访问从下标为1开始,元素个数为4

      模式替换

        形式为:${数组名[@*]/模式/新值}

        例如:${arr_number[@]/2/98}

      数组的遍历

        数组遍历我们使用for语句来演示:

        for v in ${arr_number[@]}; do

          echo $v;

        done

  • 相关阅读:
    Codeforces Round #319 (Div. 2) D
    因为网络请求是 异步的,
    ios真蛋疼,
    单例模式的两种实现,
    jump, jump,
    一点 误删,
    关于代理,
    button上的两个手势,
    数据,
    header 的蓝色,
  • 原文地址:https://www.cnblogs.com/micoblog/p/9811152.html
Copyright © 2020-2023  润新知