8.操作Shell中变量的字符串截取、替换、删除

字符串的截取(相当于一种运算,在原有变量的基础上获得新的结果,不会改变原来的变量的值):
    a=abcd        
        #这个变量里可以是数字也可以是字符
    echo ${a:1:1}
        #从a这个变量的第二位开始截取(第一位是0,如果从第一位开始截取0可以省略不写),只截取1位
        #输出结果就是b
        
    可以与RANDOM连用,比如:
        a=1234abcd
        b=$[ RANDOM%8 ]      
            #这是1-7的随机数,因为你截取的变量长度是0-7
        echo ${a:b:1}
            #随机截取1位
    
    脚本示例:
        a=1234567abcdefg
        for i in {1..8}
        do
          b=$[ RANDOM%14 ]            #0-13之间的数
          bb=${a:b:1}                #从a这个变量里的字符串截取,从b位开始截,只截1个
          c=$c$bb                    #变量c等于取c和b的组合  
        done
        echo $c
                #最后这个c就可以用做随机密码
        用bash去执行这个脚本,如果用source的话,变量会存在当前环境中
        
        
字符串替换(相当于一种运算,在原有变量的基础上获得新的结果,不会改变原来的变量的值):
    a=aabbcc
        #这个变量里可以是数字也可以是字符
    单项置换:
        echo ${a/aa/88}    
        输出88bbcc
            #把a变量中的aa的内容替换成88,这个替换默认只换第一个匹配到的部分
        echo ${a/a/8}    
        输出8abbcc
        
        echo ${a/a/}
        输出abbcc
    多项置换:
        echo ${a//b/8}    
        输出aa88cc
            #//的写法就是全匹配,只要b全替换成8
            
        
字符串删除(相当于一种运算,在原有变量的基础上获得新的结果,删除和替换为空是不一样的,不会改变原来的变量的值)
    从左往右删除:
        #!/bin/bash
        a=root:x:0:0:root:/root :/bin/bash
        echo ${a#root}        
            #这里的#代表从左往右删除,删除第一个匹配项,删除的是a这个变量里的第一个root,此时并不会改变变量a本身的值
            输出
            :x:0:0:root:/root:/bin/bash
        echo ${a##*root}
            #这里的##代表从左往右删除,删除变量a中的所有root及它前面的内容,必须写*,不然到:root它就识别不了了,它会认为:root是一个整体,而不是root,此时并不会改变变量a本身的值
            输出
            :/bin/bash
        echo ${a##* }
            #把空格以前的内容全删了
    
    从右往左删除:
        #!/bin/bash
        a=`head -1 /etc/passwd`
        echo $a
        输出
        root:x:0:0:root:/root:/bin/bash
        echo ${a%bash}
            #删a里的第一个bash,从右往左删
        echo ${a%%:*}
            #一直删a里的最后一个:及它后面的内容,因为从右开始删,所以*在后
                        
    脚本示例:
        我们先创建3个文件
        touch test{1..3}.txt            
        需求:通过脚本的方式将这3个文件的扩展名改为doc
        #!/bin/bash
        for i in `ls *.txt`        #假如我们有一万个txt结尾的文件,甚至更多,我们不确定数量的情况
        do
        mv $i ${i%txt}doc        #这种是删除,还可以用替换,就是 mv $i ${i/txt/doc}
        done
    
变量定义初值:
    a=            
        #先定义一个空变量
    echo {a:-123}        
        #给这个变量定义一个初始值,假如这个变量里的值为空,则这次会输出123,有值则输出a原本的值
    
    通常初值可以被用做位置变量,当用户执行脚本没有输入位置变量时,可以用初值替换
    
    示例:
        #!/bin/bash
        read -p "请输入用户名" u
        useradd $u
        read -p "请输入密码,如果不输入则自动生成初始密码" p
        echo ${p:-123} | passwd --stdin $u
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值