变量替换

1、${变量名#匹配规则}

作用:从变量开头进行规则匹配,将符合最短的数据删除

[root@php.svn-server ~]
# var="I Love you! Do you love me?"

[root@php.svn-server ~] //从开头匹配去除I字符
# echo ${var#I}
Love you! Do you love me?

[root@php.svn-server ~] //从开头匹配任意字符带ov的字符串删除
# echo ${var#*ov}
e you! Do you love me?

2、${变量名##匹配规则}

作用:从变量开头进行规则匹配,将符合最长的数据删除

[root@php.svn-server ~]
# var="I Love you! Do you love me?"

[root@php.svn-server ~]
# echo ${var##*ov}
e me?

3、${变量名%匹配规则}

作用:从变量尾部进行规则匹配,将符合最短的数据删除

[root@php.svn-server ~]
# echo ${var%ov*}
I Love you! Do you l

#属于倒数开始

4、${变量名%%匹配规则}

作用:从变量尾部进行规则匹配,将符合最长的数据删除

[root@php.svn-server ~]
# echo ${var%%ov*}
I L

5、${变量名/旧字符串/新字符串}

作用:变量内容符合旧字符规则,则第一个就字符会被新字符串取代

[root@php.svn-server ~]
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin


[root@php.svn-server ~]
# echo ${PATH/bin/BIN}
/usr/local/sBIN:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

6、${变量名//旧字符串/新字符串}

作用:变量内容符合旧字符串则,则全部的旧字符串会被新字符串取代

[root@php.svn-server ~]
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@php.svn-server ~]
# echo ${PATH//bin/BIN}
/usr/local/sBIN:/usr/local/BIN:/usr/sBIN:/usr/BIN:/root/BIN

字符串处理

计算字符串的长度方式一: ${#string}

[root@php.svn-server ~]
# echo ${#PATH}
59

计算字符串的长度方式二: expr length ${变量}

[root@php.svn-server ~]
# expr length "$PATH"
59

计算字符串的长度方式三: expr macth ${变量} 表达式

说明:match是从头开始匹配的。

[root@php.svn-server ~]
# var1="quickstart is a app"

[root@php.svn-server ~]
# echo `expr match "$var1" quic`
4

[root@php.svn-server ~]
# echo `expr match "$var1" app`
0

[root@php.svn-server ~]
#  echo `expr match "$var1" .*a`
17

[root@php.svn-server ~]
#  echo `expr match "$var1" .*app`
19

获取字符串索引位置:expr index ${string} substr

说明:索引从1开始计数。

[root@php.svn-server ~]
# var1="quicstart is a app"

[root@php.svn-server ~]
# var1="quickstart is a app"

[root@php.svn-server ~]
# echo `expr index "$var1" start`
6

[root@php.svn-server ~]
# echo `expr index "$var1" uniq`
1

抽取子字符串的方式一:${string:position}

说明:从string中的postion开始

索引从0开始

[vagrant@docker-host ~]$ var1="wo shi qi dong"
[vagrant@docker-host ~]$ echo ${var1:5}
i qi dong

抽取子字符串的方式二:${string:postion:length}

说明:从postion开始,匹配长度为length

[vagrant@docker-host ~]$ var1=0123456789
[vagrant@docker-host ~]$ echo ${var1:5:5}
56789

抽取子字符串的方式三:${string:-position}

说明:从右边开始匹配、注意必须中间有空格

[vagrant@docker-host ~]$ var1=0123456789
[vagrant@docker-host ~]$ echo ${var1: -5 }
56789
[vagrant@docker-host ~]$ echo ${var1: -5 :2}
56
[vagrant@docker-host ~]$
##下面的方式同理

抽取子字符串的方式四:${string:(position)}

说明:从左边开始匹配

[vagrant@docker-host ~]$ var1=0123456789
[vagrant@docker-host ~]$ echo ${var1:(-5)}
56789
[vagrant@docker-host ~]$

抽取子字符串的方式五:expr substr $string $position $length

说明:从postion开始,匹配长度的length

[vagrant@docker-host ~]$ var1=0123456789
[vagrant@docker-host ~]$ echo `expr substr "$var1" 5 5`
45678
[vagrant@docker-host ~]$

因为索引是从1开始的、所以结果为45678

编写一个简单的交互脚本

说明:格式一定要严格,不能有; {}位置一定要放好

#!/usr/bin/env bash

string="BigData process frame work 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"
    echo  "********************************"
}

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/Mapredice}
}

while true
do
    echo -e "\r\n"
    echo "[string=$string]"
    echo
    print_tips
    read -p "Pls 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;please input (1|2|3|4|q|Q)";
    ;;
    esac



done
Last modification:February 1, 2020
如果觉得我的文章对你有用,请随意赞赏