目录
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