zoukankan      html  css  js  c++  java
  • shell脚本知识点

    -2 shell中的算术运算

    *这是因为,在 Bash Shell 中,如果不特别指明,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。

    第一种:. 

    -1. 获取变量的类型

    第一种:. 

    0. 获取字符串长度
    第一种:.  name=Alex
                      echo ${#name}

    第二种:echo "abc" |wc -L

    第三种:echo "abc" |awk -F "" '{print NF}'

    第四种:echo “Alex”|awk '{print length($0)}'

    二、字符串操作(长度,读取,替换)

    表达式含义
    ${#string} $string的长度
       
    ${string:position} 在$string中, 从位置$position开始提取子串
    ${string:position:length} 在$string中, 从位置$position开始提取长度为$length的子串
       
    ${string#substring} 从变量$string的开头, 删除最短匹配$substring的子串
    ${string##substring} 从变量$string的开头, 删除最长匹配$substring的子串
    ${string%substring} 从变量$string的结尾, 删除最短匹配$substring的子串
    ${string%%substring} 从变量$string的结尾, 删除最长匹配$substring的子串
       
    ${string/substring/replacement} 使用$replacement, 来代替第一个匹配的$substring
    ${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring
    ${string/#substring/replacement} 如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
    ${string/%substring/replacement} 如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
       

    1. 比较两个带空格的字符串是否相等:条件用[[ ]]括起来,若是不带空格的两个字符串,就[ ]就行。

    n='Docker version 1.13.1, build 0be3e21/1.13.1'
    m='Docker version 1.13.1, build 0be3e21/1.13.1'

    if [[ $m = $n ]];then
    echo "success"
    else
    echo "fail"
    fi

    -------------------------------------
    n='Docker'
    m='Docker'

    if [ $m = $n ];then
    echo "success"
    else
    echo "fail"
    fi
    或者
    n='Docker'
    m='Docker'

    if test $m = $n
    then
    echo "success"
    else
    echo "fail"
    fi

    2. shell脚本判断docker是否安装
    docker -v
    返回:Docker version 1.13.1, build 0be3e21/1.13.1
    d='Docker version'
    res=$(docker -v)
    if [[ $d = ${res:0:14} ]];then
    echo "*******************docker exist*******************"
    else
    echo "**************install docker**********************"
    yum -y install docker
    fi


    3. 判断文件夹不存在,然后创建
    if [ ! -d "jenkins" ]; then
    mkdir jenkins
    fi

    4. 判断变量的长度
    m="rong"
    echo ${#m}
    返回:4

    5.shell字符串截取

    Shell脚本8种字符串截取方法总结

    Linux 的字符串截取很有用。有八种方法。
    假设有变量 var=http://www.aaa.com/123.htm.
    1. # 号截取,删除左边字符,保留右边字符。
    代码如下:

    echo ${var#*//}
    其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
    即删除 http://
    结果是 :www.aaa.com/123.htm
    2. ## 号截取,删除左边字符,保留右边字符。
    代码如下:

    echo ${var##*/}
    ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
    即删除 http://www.aaa.com/
    结果是 123.htm
    3. %号截取,删除右边字符,保留左边字符
    代码如下:

    echo ${var%/*}
    %/* 表示从右边开始,删除第一个 / 号及右边的字符
    结果是:http://www.aaa.com
    4. %% 号截取,删除右边字符,保留左边字符
    代码如下:

    echo ${var%%/*}
    %%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
    结果是:http:
    5. 从左边第几个字符开始,及字符的个数
    代码如下:

    echo ${var:0:5}
    其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
    结果是:http:
    6. 从左边第几个字符开始,一直到结束。
    代码如下:

    echo ${var:7}
    其中的 7 表示左边第8个字符开始,一直到结束。
    结果是 :www.aaa.com/123.htm
    7. 从右边第几个字符开始,及字符的个数
    代码如下:

    echo ${var:0-7:3}
    其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
    结果是:123
    8. 从右边第几个字符开始,一直到结束。
    代码如下:

    echo ${var:0-7}
    表示从右边第七个字符开始,一直到结束。
    结果是:123.htm
    注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)



    参考资料:https://www.cnblogs.com/DreamDrive/p/7706585.html
    https://blog.51cto.com/14142757/2414157
    https://www.cnblogs.com/ralphdc/p/8032335.html

    Shell中判断文件,目录是否存在

     

    一. 具体每个选项对应的判断内容:

    复制代码
    -e filename 如果 filename存在,则为真 
    -d filename 如果 filename为目录,则为真 
    -f filename 如果 filename为常规文件,则为真 
    -L filename 如果 filename为符号链接,则为真 
    -r filename 如果 filename可读,则为真 
    -w filename 如果 filename可写,则为真 
    -x filename 如果 filename可执行,则为真 
    -s filename 如果文件长度不为0,则为真 
    -h filename 如果文件是软链接,则为真
    复制代码

    二.常用的例子:

    1.判断文件夹是否存在

    复制代码
    #shell判断文件夹是否存在
    
    #如果文件夹不存在,创建文件夹
    if [ ! -d "/myfolder" ]; then
      mkdir /myfolder
    fi
    复制代码

    2.判断文件夹是否存在并且是否具有可执行权限

    复制代码
    #shell判断文件,目录是否存在或者具有权限
    folder="/var/www/"
    file="/var/www/log"
    
    # -x 参数判断 $folder 是否存在并且是否具有可执行权限
    if [ ! -x "$folder"]; then
      mkdir "$folder"
    fi
    复制代码

    3.判断文件夹是否存在

    # -d 参数判断 $folder 是否存在
    if [ ! -d "$folder"]; then
      mkdir "$folder"
    fi

    4.判断文件是否存在

    # -f 参数判断 $file 是否存在
    if [ ! -f "$file" ]; then
      touch "$file"
    fi

    5.判断一个变量是否有值

    # -n 判断一个变量是否有值
    if [ ! -n "$var" ]; then
      echo "$var is empty"
      exit 0
    fi

    6.判断两个变量是否相等.

    复制代码
    # 判断两个变量是否相等
    if [ "$var1" = "$var2" ]; then
      echo '$var1 eq $var2'
    else
      echo '$var1 not eq $var2'
    fi
    复制代码
  • 相关阅读:
    《MySQL必知必会》第六章:过滤数据
    《MySQL必知必会》第七章:数据过滤
    《MySQL必知必会》第五章:排序检索数据
    Java高级特性:clone()方法
    Java基础知识详解:abstract修饰符
    Java虚拟机:虚拟机内存区域和内存溢出异常
    Java虚拟机:源码到机器码
    Java虚拟机:本地方法栈与Native方法
    [LeetCode] 1481. Least Number of Unique Integers after K Removals
    [LeetCode] 331. Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/yoyoma0355/p/14281266.html
Copyright © 2011-2022 走看看