zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    luoguP2016 战略游戏
    [Usaco2006 Nov]Corn Fields牧场的安排
    [Ahoi2009]self 同类分布
    POJ3208:Apocalypse Someday
    [usaco2010 Oct]Soda Machine
    [Usaco2005 Dec]Scales 天平
    PTA的Python练习题(十九)
    堆叠注入
    PHP序列化与反序列化(三)总结实战
    攻防世界web进阶1-12总结篇
  • 原文地址:https://www.cnblogs.com/agostop/p/2710555.html
Copyright © 2011-2022 走看看