Shell脚本基础

1、$[变量#匹配规则]       (懒惰模式最短匹配)             #从头开始匹配,最短删除

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var2=${var1#*ve}
[root@liudongyi ~]# echo $var2
you,but you love he

2、$[变量##匹配规则]        (贪婪模式最长匹配)          #从头开始匹配,最长删除

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var3=${var1##*ve}
[root@liudongyi ~]# echo $var3

3、$[变量%匹配规则]          *代表任意多个字符           #从尾开始匹配,最短删除

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var4=${var1%ov*}
[root@liudongyi ~]# echo $var4
l love you,but you l

4、$[变量%%匹配规则]                  #从尾开始匹配,最长删除

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var5=${var1%%ov*}
[root@liudongyi ~]# echo $var5
l l

5、$[变量/旧字符串/新字符串]            #替换变量内的旧字符串为新字符串,只替换

如果我要把var1中的love替换成like

[root@liudongyi ~]# var1="l love you,but you love he"
[root@liudongyi ~]# var6=${var1/love/like}
[root@liudongyi ~]# echo $var6
l like you,but you love he
[root@liudongyi ~]# 

我们发现只替换了第一个匹配到的love,后面你的love没有被替换

6、$[变量//旧字符串/新字符串]           #替换变量内的旧字符串为新字符串,替换全部

我们把var1中的字符全部替换成like

[root@liudongyi ~]# var7=${var1//love/like}
[root@liudongyi ~]# echo $var7
l like you,but you like he
[root@liudongyi ~]# 

  

计算机字符串的长度

方法1:${#string}

[root@liudongyi ~]# var1="Hello World"
[root@liudongyi ~]# len=${#var1}
[root@liudongyi ~]# echo $len

方法:2:expr length $string

[root@liudongyi ~]# len1=`expr length "$var1"`
[root@liudongyi ~]# echo $len1

获取字符索引位置

方法:expr index "$string" substr

查找start在字符串中的位置(其实寻找字符start中任意一个字符在完整字符串中的位置,那个最快匹配返回那个值)

[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" start`
[root@liudongyi ~]# echo $inde

比如uniq中的字符q是var1中的第一个字符,所以返回值为1

[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" uniq`
[root@liudongyi ~]# echo $inde
1

在var1中的cnk中的字符c字符最先匹配,所以返回值为4

[root@liudongyi ~]# var1="quickstart is a app"
[root@liudongyi ~]# inde=`expr index "$var1" cnk`
[root@liudongyi ~]# echo $inde

抽取字符串中的子串

方法1:

1)${string:position}指定开始提取的位置

意味着var的字符串,我是从第10个字符开始提取后面的字符

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr=${var1:10}
[root@liudongyi ~]# echo $substr

2)  ${string:position:length}

从var1指定位置10开始匹配5个字符,包括空格符

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1:10:5}
[root@liudongyi ~]# echo $substr1

3)  ${string: -position}  或者 ${string :(position)}

截取后三个字符的字符串:

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1: -3}
[root@liudongyi ~]# echo $substr1

截取var1字符串从第七个字符开始的字符子串

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr1=${var1: (7)}
[root@liudongyi ~]# echo $substr1

方法2

expr substr $string $position $length

从var1中的字符串第五个位置截取10个长度的子串

[root@liudongyi ~]# var1="kafka hadoop yarn mapreduce"
[root@liudongyi ~]# substr=`expr substr "$var1" 5 10`
[root@liudongyi ~]# 
[root@liudongyi ~]# echo $substr
a hadoop y

注意:使用expr,索引计数是从1开始计算:使用${string:position},索引计数从0开始

编写一个小脚本:

用户输入1|2|3|4,可以执行对应项的功能:输入Q|q则退出

(1)、打印string长度

(2)、删除字符串中所有的Hadoop

(3)、替换第一个Hadoop为Mapreduce

(4)、替换全部Hadoop为Mapreduce

#!/bin/bash
#
string="Bigdata process framework is Hadoop,Hadoop is an open source project"

function print_tips
{       
        echo "*************************"
        echo "(1)打印string长度"
        echo "(2)删除字符串中所有的Hadoop"
        echo "(3)替换第一个Hadoop为Mapreduce"
        echo "(4)替换全部Hadoop为Mapreduce"

}

function len_of_string
{       
        echo "${#string}"

}
function del_hadoop
{
        echo "${string//Hadoop/}"
}
function rep_hadoop_mapreduce_first
{
        echo "${string/Hadoop/Mapreduce}"
}
function rep_hadoop_mapreduce_all
{
        echo "${string//Hadoop/Mapreduce}"
}

while true
do
        echo "  [string=$string]     " 
        echo
        print_tips
        read -p "please input your choice(1|2|3|4|q|Q):" choice

        case $choice in
                1)      len_of_string
                        ;;
                2)      del_hadoop
                        ;;
                3)      rep_hadoop_mapreduce_first
                        ;;
                4)      rep_hadoop_mapreduce_all
                        ;;
                q|Q)    exit
                        ;;
                *)      echo "Error,input only in{1|2|3|4|q|Q}"
                        ;;
        esac
done
                                

至此,如果对Shell有兴趣请看下一篇博客

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值