美文网首页
Shell脚本杂记

Shell脚本杂记

作者: rgcyc | 来源:发表于2019-08-07 13:55 被阅读0次

    1.判断字符串是否为空

    #!/bin/sh
    
    STRING=
    if [ -z "$STRING" ]; then 
        echo "STRING is empty" 
    fi
    if [ -n "$STRING" ]; then 
        echo "STRING is not empty" 
    fi
    
    root@james:~# ./zerostring.sh 
    STRING is empty
    

    2.函数返回字符串

    Shell的函数默认只支持返回状态码(整数),不支持字符串。如果想要返回字符串可传入变量,在函数中修改变量为想要返回的值。

    #!/bin/bash
    set -x
    function pass_back_a_string() {
        eval "$1='foo bar rab oof'"
    }
    
    return_var=''
    pass_back_a_string return_var
    echo $return_var
    

    3. if...elif...fi 语句

    if [ expression 1 ]
    then
       Statement(s) to be executed if expression 1 is true
    elif [ expression 2 ]
    then
       Statement(s) to be executed if expression 2 is true
    elif [ expression 3 ]
    then
       Statement(s) to be executed if expression 3 is true
    else
       Statement(s) to be executed if no expression is true
    fi
    

    4.sed正则提取字符串

    sed命令格式:

    # sed 's/oldValue/newValue/g'
    

    提取字符串:

    # echo here365test | sed 's/.*ere\([0-9]*\).*/\1/g'
    > 365
    

    s表示替换,\1表示用第一个括号里面的内容替换整个字符串,sed支持*,不支持?、+,不能用\d之类,正则支持有限。

    5.shell特殊变量

    变量 含义
    1.$0 当前脚本的文件名
    2.$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是1,第二个参数是2。
    3.$# 传递给脚本或函数的参数个数。
    4.$* 传递给脚本或函数的所有参数。
    5.$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同。

    6.$? 上个命令的退出状态,或函数的返回值。
    7.$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

    http://c.biancheng.net/cpp/view/2739.html

    6.zip 压缩、解压缩文件

    # zip -r filename.zip filename  // 压缩单个目录命令 
    # zip all.zip *.jpg   // 这条命令是将所有 .jpg 的文件压缩成一个 zip 包
    # unzip all.zip       // 这条命令是将 all.zip 中的所有文件解压出来
    

    7.rar压缩、解压缩文件

    安装rar

    # wget http://www.rarlab.com/rar/rarlinux-3.8.0.tar.gz
    # tar zxvf rarlinux-3.8.0.tar.gz
    # cd rar
    # make
    # make install 
    

    压缩、解压缩

    # rar a all.rar *.jpg
    # unrar e all.rar
    

    8.软链接

    # ln -s 源文件 目标文件。
    

    9.获取文件后缀名

    file=$1
    
    if [ "${file##*.}"x = "css"x ]||[ "${file##*.}"x = "js"x ];then
        do something
    fi
    

    注意:

    1> 提取文件后缀名: ${file##*.}

    ##是贪婪操作符,从左至右匹配,匹配到最右边的.号,移除包含.号的左边内容。
    

    这里可以参考 http://www.1987.name/264.html

    2> 是=,而且其两边有空格,如果没有空格,会报错

    3> 多加了x,是为了防止字符串为空时报错。

    这里可以参考http://qubaoquan.blog.51cto.com/1246748/292461

    9.计算时间差

    #!/bin/bash
    START=$(date +%s)
    END=$(date +%s)
    DIFF=$(( $END - $START ))
    

    10.检查字符串是否以某些字符开头

    ==比较

    str="hello"
    if [[ $str == h* ]];
    then
     echo 'yes'
    fi
    

    有两个地方需要注意:

    1. h*不需要使用引号括起来,使用引号括起来是直接做相等比较
    2. 比较语句使用双中括号括起来,而不是使用单中括号

    =~正则比较

    str="hello"
    if [[ "$str" =~ ^he.* ]]; then
        echo "yes"
    fi
    

    使用正则匹配字符串的开头字符需要注意:

    1. he:不要使用he,这里的*号表示e字符0到多个,即h,以及heeee都是测试通过的
    2. he.*:这里只允许包含he的字符串通过测试
    3. ^he.*:这个表示是以he开头的字符串通过检测

    相关文章

      网友评论

          本文标题:Shell脚本杂记

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