• BASH变量测试和样式对比


    unset myname
    r=${myname-'Basher'}
    echo $r

    结果为Basher

    测试存在与否

    myname=
    r=${myname:-'Basher'}
    echo $r

    结果为Basher

    变量不存在或其值为空,传回默认值

    unset conut
    r=${count:=100}
    echo $count
    
    结果100

    变量不存在或为空,赋一个默认值给变量

    fn=${1:?'error!please remove the dir'}
    
    没有传参,则打印错误信息

    变量不存在或为空,打印提示信息

    IamHappy='Feel so good'
    r=${IamHappy:+"$@"}
    echo $r
    
    结果为所有传递的参数

    变量存在,则返回一个值

    myname="sheller man"
    substr=${myname:4}
    echo $substr
    
    显示ler
    man

    #vi test.bash
    #!/bin/bash
    echo $0
    echo ${@:1}

    #./test.bash aa bb cc dd
    aa bb cc dd
    将${@:1}改为${@:2}时,结果为:
    bb cc dd
    显示指定参数数字之后的参数
    将${@:2}改为${@:2:2},结果为:
    bb cc
    显示指定参数数字之后的参数个数 

    截取字符串

    filename="/usr/sbin/ntpdate"
    echo ${$filename}
    结果:17
    echo ${#数组[@]} 取得数组元素的个数

    计算字符串长度

    ===========

    TEST="/usr/bin/date"
    echo ${TEST#/*/}
    由前面对比,删最短的,结果:bin/date
    TEST="/usr/bin/date"
    echo ${TEST##/*/}
    由前面对比,删最长的,结果:date
    TEST="/usr/bin/date"
    echo ${TEST%/*}
    由字符串后面对比,删除最短的,结果:/usr/bin
    TEST="www.test.com.cn"
    echo ${TEST%%.*}
    由后面对比,删最长的,结果:www
    TEST="mail:x:8:8:mail:/var/mail:/bin/sh"
    R=${TEST/:/,}
    echo $R
    只替换第一个对比符合的字符串,结果:mail,x:8:8:mail:/var/mail:/bin/sh
    TEST="mail:x:8:8:mail:/var/mail:/bin/sh"
    R=${TEST//:/,}
    echo $R
    替换全部对比符合的字符串,结果为:mail,x,8,8,mail,/var/mail,/bin/sh
    TEST="mail:x:8:8:mail:/var/mail:/bin/sh"
    R=${TEST/:/}
    echo $R
    删除第一个符合样式的字符串,结果:mailx:8:8:mail:/var/mail:/bin/sh
    TEST="mail:x:8:8:mail:/var/mail:/bin/sh"
    R=${TEST//:/}
    echo $R
    删除所有符合的,结果:mailx88mail/var/mail/bin/sh
    str="yes, This is a TITLE."
    r=${str/#T* /}
    echo $r
    行2要对比的是:位置在句首,T字符后接的任意长度的字符,最后以空格符结尾的字符串,因$str中无此样式,所以,整个str变量值原封不动的传回给r。
    如果把行2样式改为${str/T* /},表示样式不一定要位于句首,那么就符合了条件,对比到的字符串是This is a,删除后,r的值为yes,TITLE。

    ==========

    取得数组索引列表:

    TEST=(a b c d e f)
    for i in "${!TEST[@]}"
    do
        echo "$i: ${TEST[$i]}"
    done
    运行结果:
    0: a
    1: b
    2: c
    3: d
    4: e
    5: f

    命令替换:

    tmp=$(ifconfig eth0 | grep 'inet addr')
    r=${tmp/inet addr:/}#取出匹配字符之后的内容
    ip=${r/ Bcast*/}  #删除变量r中匹配字符内容
    echo $ip
    显示 ip地址

    ========

    算数运算:

    I=$((1+2))
    echo $I
    得到3,如果不加括号,则只能得到“1+2”
    有多种方法实现:
    $r=`expr 1+2`
    $r=[1+2]
    let $r=1+2
  • 相关阅读:
    为什么每天都在学习,生活还是没有任何改善?
    MySql基础汇总
    BeanUtils.copyProperties(待复制对象, 待更新对象) || PropertyUtils.copyProperties(待更新对象, 待复制对象)
    ThreadLocal
    synchronized 锁
    STS报could not find tools.jar in the active JRE
    SpringBoot 定时任务 || cron表达式
    lombok注解
    cron表达式
    Thymeleaf 模板引擎
  • 原文地址:https://www.cnblogs.com/agostop/p/2710555.html
Copyright © 2020-2023  润新知