• Shell编程学习1-变量的高级用法


    1.变量替换和测试

    (1)变量替换

    在这里插入图片描述
    例子1:删除

    1
    variable_1 = "I love you,do you love me?"
    echo $varible_1           
    I love you,do you love me?//出现整个字符串
    
    2
    var1 = ${variable_1#*ov}  
    echo $var1
    e you,do you love me? //匹配到最开头的ov字符串就返回,并删除之前所有字符
    
    3
    var2 = ${variable_1##*ov}  
    echo $var2
    e me? //匹配到最后的ov字符,并返回,删除之前所有字符
    
    4
    var3 = ${variable_1%ov*}
    echo $var3
    I love you,do you l //从后往前,最先遇到ov就返回
    
    5
    var4 = ${variable_1%%ov*}
    echo $var4
    I l //从后往前,遇到最后一个ov才返回
    
    总结:
    variable_1 = "I love you,do you love me?"
    var1 = ${variable_1#*ov}
    var2 = ${variable_1##*ov}
    var3 = ${variable_1%ov*}
    var4 = ${variable_1%%ov*}
    

    例子2:替换

     var5 = ${PATH/bin/BIN} //把PATH中从头开始第一个小写的bin替换成大写的BIN
     var6 = ${PATH//bin/BIN} //全部替换
    

    (2)变量测试

    在这里插入图片描述

    不常用

    2.字符串处理

    (1)计算字符串长度

    在这里插入图片描述

     1.计算字符串长度
     var1 = "Hello World"
     len = ${#var1}
     len = ‘expr length "$string"’
    

    (2)获取子串在字符串中的索引位置

    在这里插入图片描述

    //获取字符索引位置
    expr index "$string" substr
    
    var1 = "quicstart is a app"
    
    ind = ‘expr index "$var1" start’
    echo $ind //输出6
    
    sub_len  = 'expr match "$var1" app'
    echo $sub_len //输出0
    
    sub_len = 'expr match "$var1" quic'
    echo $sub_len //输出4,说明是从头开始匹配,从中间匹配不到
    
    sub_len = 'expr match "$var1" quic.*'
    echo $sub_len //18
    
    sub_len = 'expr match "$var1" quicstart'
    echo $sub_len //9
    

    该方法不常用

    (3)计算子串长度

    在这里插入图片描述

    (4)抽取子串

    在这里插入图片描述

    var = “kafka hadoop yarn mapreduce”
    
    substr_1 = ${var1:10} //从第10个位置提取,提取到最后一个字符
    echo $substr_1 //op yarn mapreduce
    
    substr_2 = ${var1:10:5} //从0开始,从第10个字符往后5个
    echo $substr_2 //op ya
    
    substr_3 = ${var1: -5}
    echo $substr_3 //educe
    
    substr_4 = ${var1:(-5)}
    echo $substr_4 //educe,与substr_3一致
    
    substr_5 = ${var1: -5:2}
    echo $substr_5 //ed
    
    substr_6 = 'expr substr "$var1" 10 5' //与substr_2比较,此处从1开始数
    echo $substr_6 //oop y
    

    索引下标是从0开始数,expr是从1开始数!

    3.命令替换

    在这里插入图片描述

    例一:获取所有用户名并输出
    
    
    例二:根据系统时间计算今年或明年
    echo “This is $(date +%Y) year”
    echo "This is $(($(date +%Y) + 1)) year"
    

    $() 命令替换,= ``

    $(()) 整数运算,加减乘除

    例三:根据系统时间获取今年还剩下多少星期,已经过了多少星期
    date +%j
    echo "This year have passed $(date +%j) days"
    echo "This year have passed $(($(date +%j)/7)) weeks" 
    
    根据系统时间计算还有多长时间到新年
    echo "There is $((365 - $(date +%j))) days before new year"
    echo "There is $(((365 - $(date +%j))/7)) weeks before new year"
    
    例四:判定nginx进程是否存在,若不存在就拉进该进程
    ps -ef | grep nginx   //查看nginx进程是否存在
    ps -ef | grep nginx | wc -l   //最后是字母l,wc -l 作用是查看前面生成的有几行
    systemctl stop nginx //杀死Nginx
    ps -ef | grep nginx | grep -v grep | wc -l
    

    在这里插入图片描述

  • 相关阅读:
    SQL Server 判断各种对象是否存在和sysobjects的关系
    SQL Server 通过“with as”方法查询树型结构
    js Iframe与父级页面通信及IE9-兼容性
    SQL Server Update 链接修改和when的应用
    C# 使用表达式树获取特性的值
    .Net Core 防止跨站点请求伪造
    SQL Server 待定
    C# Http请求
    C# Linq 笛卡尔积
    SQL Server 存储过程、函数、触发器的定义
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059172.html
Copyright © 2020-2023  润新知