Bash 第六讲 Bash 字符串运算符、查找字符串长度、拆分字符串、提取子字符串、拼接字符串

10 篇文章 0 订阅
8 篇文章 0 订阅

Bash 字符串运算符

同其他编程语言一样,在 Bash 中,字符串也是一种数据类型。只要以" “引起来,不论是数字还是字符,都会被 Bash 视为字符串。如"Welcome to W3Cschool”。

字符串运算符

= 等于运算符,等于时返回true。
语法示例:

Str1 = Str2

应用示例:

#!/bin/bash

Str1="W3Cschool.cn"
Str2="W3C"

if [ $Str1 = $Str2 ];
then
echo "True"
else
echo "False"
fi

执行后得到以下结果:

False

!= 不等于运算符,不等于时返回true。
语法示例:

Str1 != Str2

应用示例:

#!/bin/bash

Str1="W3Cschool.cn"
Str2="W3C"

if [[ $Str1 != $Str2 ]];
then
echo "True"
else
echo "False"
fi

执行后得到以下结果:

True

检查字符串长度是否为零。

  • -n,不为零时返回true。
    语法示例:
-n Str

应用示例:

#!/bin/sh

Str="Welcome to W3Cschool"

if [ -n $Str ];
then
 echo "True"
else
    echo "False"
fi

执行后返回以下结果:

True
  • -z为零时。返回true。
    语法示例:
-z Str

应用示例:

#!/bin/sh

Str="Welcome to W3Cschool"

if [ -z $Str ];
then
 echo "True"
else
    echo "False"
fi

执行后返回以下结果:

False

检查字符串长度是否为空。

  • -str不为空时,返回true。
    语法示例:
-str Str

应用示例:

#!/bin/sh

Str="Welcome to W3Cschool"

if [ -str $Str ];
then
 echo "True"
else
    echo "False"
fi

执行后返回以下结果:

True

Bash 查找字符串长度

在某些情况下,您可能需要了解字符串的长度才能对该字符串执行某些操作。由于在 Bash 中没有相关的内置函数,所以需要参考以下几种方法来学习查找字符串的长度。

方法一

在查找字符串长度的方法中,最简单的是使用#符号。
语法示例:

$(#String)

应用示例:

#!/bin/bash

Str="Welcome to W3Cshool.cn"
length=${#Str}

echo "Length of '$Str' is $length"

执行后得到以下结果:

Length of 'Welcome to W3Cscholl.cn' is 23
方法二

也可将expr命令与length关键字一起使用。
语法示例:

`expr length "$String"`

应用示例:

#!/bin/bash 

Str="Welcome to W3Cscholl.cn"
length=`expr length "$Str"`

echo "Length of '$Str' is $length"

执行后得到以下结果:

Length of 'Welcome to W3Cscholl.cn' is 23
方法三

您也可以选择使用expr “$String”: ’ .*'来查找字符串长度。
语法示例:

expr "$String": ' .*'

应用示例:

#!/bin/bash

Str="Welcome to W3Cscholl.cn"
length=`expr "$Str" : '.*'`

echo "Length of '$Str' is $length"

执行后得到以下结果:

Length of 'Welcome to W3Cscholl.cn' is 23
方法四

您也可以选择使用wc命令来查找字符串的长度。
应用示例:

#!/bin/bash

Str="Welcome to W3Cscholl.cn"
length=`echo $Str | wc -c`

echo "Length of '$Str' is $length"

执行后得到以下结果:

Length of 'Welcome to W3Cscholl.cn' is 23
方法五

或者您可以选择使用awk命令来查找字符串长度。
应用示例:

#!/bin/bash

Str="Welcome to W3Cscholl.cn"
length=`echo $Str |awk '{print length}'`

echo "Length of '$Str' is $length"

执行后得到以下结果:

Length of 'Welcome to W3Cscholl.cn' is 23

注:
在这五个方法中,最常用的还是方法一。简单快捷永远是最优选。
为避免在某些特殊情况下需要更换操作方法,建议您脚踏实地的学习哦。

Bash 拆分字符串

在某些情况下,您可能需要先拆分字符串以进行您下一步的操作。由于在 Bash 中不包含类似其他编程语言中的split内置函数,所以需要参考以下几种方法来学习如何拆分字符串。

内部域分隔符

您可以使用$IFS在 Bash 中将字符串细分。

  • IFS被称为“内部域分隔符”,是一种 set 变量。
  • 当 bash shell 处理“命令替换”或“参数替换”时,会根据IFS的值来拆解读入的变量,然后对其进行处理。
  • IFS的默认值为空格符,也可使用\t,\n等值作为分隔符设置给IFS。
    示例:
#!/bin/bash

read -p "Enter any string separated by space: " str  #读取字符串的值。

IFS=' ' #将空格设置为分隔符。
read -ra strArr <<<"$str" #将字符串读取到数组中,并由 IFS 分配分隔符。

for i in "${strArr[@]}"; #遍历访问数组中的每个元素。
do
echo "$i"
done

执行后得到以下结果:

Enter any string separated by space:welcome to W3Cschool
welcome
to
W3Cschool
readarray 命令

在不使用IFS的情况下,您可以使用 readarray命令加上-d选项对字符串进行分割。
示例:

#!/bin/bash

read -p "Enter any string separated by colon(:) " str #读取字符串的值,并将分隔符设置为 : 。

readarray -d : -t strArr <<<"$str" #根据设置的分隔符 : 来拆分字符串。

printf "\n"

#遍历打印输出数组中的每一个值
for (( n=0; n < ${#strArr[*]}; n++ ))
do
echo "${strArr[n]}"
done

执行后得到以下结果:

Enter any string separated by colon(:) welcome:to:W3Cschool

welcome
to
W3Cschool
Trim命令

您还可以使用tr命令来分割字符串。tr用于在原有定界符的基础上,对字符串进行拆分。
示例:

#!/bin/bash

str="welcome;to;W3Cschool!" #定界符 ;
arr=($(echo $str | tr ";" "\n"))#将定界符定义给 tr

for i in "${arr[@]}"
do
echo $i
done

执行后得到以下结果:

welcome
to
W3Cschool!

Bash 提取子字符串

在 Bash 中可以使用多种方法从字符串中提取子串。子串就是包含在其父字符串中的子字符串。

基础语法定义

提取子字符串的命令是 Bash 的内置命令,相比于其他的字符串操作,给予了很大的便利。

语法:
${variable:offset:length}

注:

  • variable是目标字符串的变量名称。
  • offset位置,指定从何处开始提取字符串。
  • length偏移量,指定开始执行的字符范围。
应用示例

从字符串开头提取至指定字符结束

#!/bin/bash

echo "String: welcome to W3Cschool."
str="welcome to W3Cschool."

echo "Total characters in a String: ${#str} "

substr="${str:0:10}"

echo "Substring: $substr"
echo "Total characters in Substring: ${#substr} "

执行后得到以下结果:

String: welcome to W3Cschool.
Total characters in a String:21
Substring: welcome to
Total characters in Substring:10

从指定字符开始提取至结尾结束

#!/bin/bash

str="welcome to W3Cschool."
substr="${str:12}"
echo "$substr"

执行后得到以下结果:

W3Cschool.

Bash 拼接字符串

字符串的拼接是任何一种编程语言的硬性通用要求之一。在 shell 中字符串的拼接十分简单,但仍然需要注意细节上的处理。

基本语法
str3="${str1}${str2}"

注:

  • {}作用为帮助解释器识别变量边界。
  • 在此出于严谨考虑,最好应养成随手添加{}的习惯,避免疏忽导致脚本执行效果未达到您的期望。
示例
#!/bin/bash

str1="welcome to"

str2=" W3Cschool."

str3="${str1}${str2}"
str4="Hello user,${str1}${str2}"

echo $str3
echo $str4
注:
  • 在此出于严谨考虑,最好应养成随手添加 " "的习惯,避免疏忽导致脚本执行效果未达到您的期望。
  • 在代码第8行,若不以 " "将整个语句引起,解释器在遇到空格时将会视为字符串结束,空格之后的内容将作为其他变量或命令进行解析。
    执行后得到以下结果:
welcome to W3Cschool.
Hello user,welcome to W3Cschool.
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值