3.shell字符串操作

目录

1.shell字符串的使用

2.字符串的拼接

3.获取字符串长度

4.截取字符串

5.查找字符串中是否存在某个字符

6.字符串替换

7.字符串为空时,给个默认值


1.shell字符串的使用

     字符串是shell编程中最常用最有用的数据类型。字符串可以用单引号,也可以用双引号,也可以不用引号

#!/bin/bash
#单引号
str='Cat'
echo ${str}     //输出:Cat
str1='${str}'
echo ${str1}    //输出:${str}

#双引号
str2="Cat"
echo ${str2}    //输出:Cat
str3="I am a \"${str}\""          #此处可以使用转义字符
echo ${str3}    //输出:I am a "Cat"

单引号和双引号的区别:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 双引号里可以有变量,可以使用转义字符;

2.字符串的拼接

#!/bin/bash
str1="BeiJing"
str2=".China"

#单引号
address='I like '${str1}${str2}'!!!'
echo ${address}       #输出:I like BeiJing.China!!!     #拼接输出

address='I like ${str1}${str2}!!!'
echo ${address}       #输出:I like ${str1}${str2}!!!    #原样输出

#双引号
address="I like "${str1}${str2}"!!!"
echo ${address}       #输出:I like BeiJing.China!!!     #拼接输出

address="I like ${str1}${str2}!!!"
echo ${address}       #输出:I like BeiJing.China!!!     #拼接输出

3.获取字符串长度

#!/bin/bash
str="abcdefg"
echo ${str}
#1.利用${#str}来获取字符串长度(最方便)     ##用1即可,其他仅作参考
echo ${#str}

#2.利用awk的length方法
echo ${str} | awk '{print length($0)}'

#3.利用awk的内建变量NF来获取字符串长度
echo ${str} | awk -F "" '{print NF}'

#4.利用wc中的-L参数来获取字符串参数
echo ${str} | wc -L

#5.利用wc中的-c参数,结合echo -n参数
##备注:
##   -c参数:统计字符的个数
##   -n参数:去除"\n"换行符,不去除的话,默认带换行符。
echo -n ${str} | wc -c

#6.利用expr的length方法
expr length ${str}

#7.利用expr的$str:".*"技巧
##备注:
##   .*代表任意字符,即用任意字符来匹配字符串,结果是匹配到6个,即字符串的长度为6
expr ${str} : ".*"

4.截取字符串

#!/bin/bash
str1="my name is Mary"
#1.从字符串左边开始计数
##${string:start:length}
##备注:
##   start:起始位置,从左边开始,从0开始计数
##   length:要截取的长度
echo ${str1:3:4}    #输出:name

#2.从字符串右边开始计数
##${string:0-start:length}
##备注:相比1中,多了个0-,这是固定的写法,专门用来表示从字符串右边开始计数
##     从右边计数,其实从1开始计数
echo ${str1:0-12:4}    #输出:name

str2="http://www.baidu.com"
#3.从指定字符串截取
##语法:${string#*chars}
##说明:string --- 要截取的字符串
##     # --- 使用#号可以截取指定字符右边的所有字符
##     * --- *是通配符的一种,表示任意长度的字符串
##     *chars --- 忽略左边的所有字符,直到遇见 chars(chars 不会被截取)
echo ${str2#*://}    #输出:www.baidu.com

##语法:${string##*chars}
##说明:从string字符串最后一次出现chars的位置开始,截取chars右边的所有字符
echo ${str2##*/}     #输出:www.baidu.com

##若果不需要忽略chars左边的字符,也可以不写*号.
##相当于直接从开头截取,匹配上就截取,匹配不上就完事
str3="://www.hao123.com"
echo ${str2#://}    #输出:http://www.baidu.com
echo ${str3#://}    #输出:www.hao123.com

#4.使用%截取左边字符串
##语法:${string%chars*}
##说明:string --- 要截取的字符串
##      % --- 使用%号可以截取指定字符左边的所有字符
##      请注意*的位置,因为要截取chars左边的字符,而忽略chars右边的字符,所以*应该位于chars的右侧
echo ${str2%.com*}   #输出:http://www.baidu

##语法:${string%%*chars}
##说明:从string字符串第一次出现chars的位置开始,截取chars左边的所有字符
echo ${str2%%w*}     #输出:http://

    字符串截取总结下来:(比如aaa.com,支持 *.com 通配符方式查找)

格式说明
${string: start :length}从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: start}从 string 字符串的左边第 start 个字符开始截取,直到最后。
${string: 0-start :length}从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。(比如:0-4,不能写-4哦)
${string: 0-start}从 string 字符串的右边第 start 个字符开始截取,直到最后。
${string#*chars}从 string 字符串第一次出现 chars 的位置开始,截取 chars 右边的所有字符。
${string##*chars}从 string 字符串最后一次出现 chars 的位置开始,截取 chars 右边的所有字符。
${string%%chars*}从 string 字符串第一次出现 chars 的位置开始,截取 chars 左边的所有字符。
${string%chars*}从 string 字符串最后一次出现 chars 的位置开始,截取 chars 左边的所有字符。

  附:使用expr和cut截取

text="123 456"
#关键!只有这样写,才能保存下来,并在之后的操作中使用。
pos=`expr index "$text" " "`
echo $pos
 
#expr substr截取:
head=`expr substr "$text" 1 $pos`
echo $head
 
#cut也可以截取
echo $text | cut -c 1-$pos

5.查找字符串中是否存在某个字符

#!/bin/bash
str2="http://www.baidu.com"
#输出第一个.出现的位置
echo `expr index "${str2}" .`   结果:11
#输出第二个.出现的位置   ----   有待研究

6.字符串替换

#!/bin/bash
str2="http://www.baidu.com;http://www.hao123.com"
#1.将str2中的 com 替换成大写 COM
echo ${str2/com/COM}
#2.将str2中的全部 com 替换成大写 COM
echo ${str2//com/COM}

7.字符串为空时,给个默认值

       当字符串未声明或赋值为""(空字符串)时,使用 『-』或者 『:-』给它个设定个默认值吧(根据需要,你还可以选择 『=』 或者 『?』哦

       这种情况,也可以使用 if...then...来处理,不过 bash 提供的这种方法更简单。很好用!

#!/bin/bash
#1.未声明变量时(使用 『-』 来设置初始值)
echo ${username}
     #由于结果空白,所以 username 可能不存在,也可能是空字符串
username=${username-root} #使用-赋默认值。此处root代表默认值,你可以自定义为a、1等等
echo ${username}
root #因为 username 没有设定,所以显示为默认值 root 的内容。

#2.如果定义变量就是""空字符串(使用 『:-』 来设置初始值)
usernmae=""
username=${usernmae-root}
     #因为 username 被设定为空字符串了!所以当然还是保留为空字符串
username=${username:-root} #加上『 : 』后若变量内容为空或者是未设定,都能够以后面的内容替换!
echo ${username}
root #显示默认值 root 的内容

8.alias别名的使用

 ll 表示 ls -l。我们可以使用别名来自定义。输入 alias 可以查看目前所有的所有的命令别名

#定义clear的别名 cls
alias cls='clear'
#删除cls别名
unalias cls

本文仅用作:学习笔记

部分参考自:https://www.runoob.com/linux/linux-shell-variable.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值