参考链接:
- https://blog.csdn.net/number_0_0/article/details/73291182
- https://blog.csdn.net/u013402321/article/details/80333272
$()
和``
他们是一样的使用效果,用来作命令替换的.建议使用$()
[kafka@kafka001 kafka_2.11-0.8.2.2]$ echo $(ls)
bin config libs LICENSE log logs NOTICE
[kafka@kafka001 kafka_2.11-0.8.2.2]$ ls
bin config libs LICENSE log logs NOTICE
[kafka@kafka001 kafka_2.11-0.8.2.2]$ `ls`
-bash: bin: command not found
[kafka@kafka001 kafka_2.11-0.8.2.2]$ echo `ls`
bin config libs LICENSE log logs NOTICE
[kafka@kafka001 kafka_2.11-0.8.2.2]$
${}
用于变量替换, v a r 和 var和 var和{var}意思一样,不过${var}更精确的表明变量名。有利于拼接
[dps@ccod131 bak]$ a=123 && echo $ab
[dps@ccod131 bak]$ a=123 && echo ${a}b
123b
#%*
[dps@ccod131 bak]$ file=file1/file2/file3/file.txt && echo ${file##/}
file1/file2/file3/file.txt
# 实际有效的写法
[dps@ccod131 bak]$ file=file1/file2/file3/file.txt && echo ${file##*/}
file.txt
[dps@ccod131 bak]$ file=file1/file2/file3/file.txt && echo ${file##/*}
file1/file2/file3/file.txt
[dps@ccod131 bak]$ file=file1/file2/file3/file.txt && echo ${file%%/}
file1/file2/file3/file.txt
#实际有效的写法
[dps@ccod131 bak]$ file=file1/file2/file3/file.txt && echo ${file%%/*}
file1
[dps@ccod131 bak]$ file=file1/file2/file3/file.txt && echo ${file%%*/}
file1/file2/file3/file.txt
从以上例子可以看出:
- 上边例子中,分隔符为
/
;
#
从左边开始数,到达分割符后,将整个字段分割成两份;(#在键盘的左边,左)%
从右边开始数,到达分割符后,将整个字段分割成两份;(%在键盘的右边,右)*
将走过的地方全匹配,并删除;(故#中,其在分隔符的左边有有效;%中,其在分隔符的右边生效)- 对于
#,%
单一字符是最小匹配,两个字符是最大匹配(#表示从左边第一个分隔符开始分割,##表示从左边数的最后一个分隔符开始分割;%表示从右边第一个分隔符开始分割,%%表示从右边数的最后一个分隔符开始分割;)
实际使用:
去除文件相同的后缀
#查看符合条件的文件
dps@ccod131 bak]$ ls *.txt
aa.txt awk.txt bb.txt eof.txt err.txt file.txt test11.txt
#批量给这些文件添加后缀
[dps@ccod131 bak]$ ls *.txt | xargs -i mv {
} {
}.bak
[dps@ccod131 bak]$ ls *.bak
aa.txt.bak awk.txt.bak bb.txt.bak eof.txt.bak err.txt.bak file.txt.bak test11.txt.bak
#批量去除后缀的执行效果
[dps@ccod131 bak]$ bash for_string.sh
aa.txt awk.txt bb.txt eof.txt err.txt file.txt test11.txt
#批量去除后缀的代码
[dps@ccod131 bak]$ cat for_string.sh
#!/bin/bash
for file in $(ls *.bak)
do
mv $file ${file%.*}
done
echo $(ls *.txt*)
${string:position:length}
- 表示从位置position开始向右截取字符串,截取长度为length;
- 当length为空时,即
${string:position}
这种形式时,表示从position截取字符串,一直到结束 - 当position等于
0-1
时,表示从倒数第一个字符开始截取字符串;
[dps@ccod131 bak]$
[dps@ccod131 bak]$ abc=1234567890 && echo ${abc:0:3}
123
[dps@ccod131 bak]$ abc=1234567890 && echo ${abc:3:3}
456
[dps@ccod131 bak]$ abc=1234567890 && echo ${abc:0-3:3}
890
[dps@ccod131 bak]$ abc=1234567890 && echo ${abc:0-9:3}
234
[dps@ccod131 bak]$ abc=1234567890 && echo ${abc:5}
67890
${#var}
获取变量长度
[dps@ccod131 bak]$ abc=1234567890 && echo ${#abc}
10
替换
命令 | 说明 |
---|---|
${string/substring/replacement} |
使用 r e p l a c e m e n t , 来 代 替 第 一 个 匹 配 的 replacement, 来代替第一个匹配的 replacement,来代替第一个匹配的substring |
${string//substring/replacement} |
使用 r e p l a c e m e n t , 代 替 所 有 匹 配 的 replacement, 代替所有匹配的 replacement,代替所有匹配的substring |
${string/#substring/replacement} |
如果 s t r i n g 的 前 缀 匹 配 string的前缀匹配 string的前缀匹配substring, 那么就用 r e p l a c e m e n t 来 代 替 匹 配 到 的 replacement来代替匹配到的 replacement来代替匹配到的substring |
${string/%substring/replacement} |
如果 s t r i n g 的 后 缀 匹 配 string的后缀匹配 string的后缀匹配substring, 那么就用 r e p l a c e m e n t 来 代 替 匹 配 到 的 replacement来代替匹配到的 replacement来代替匹配到的substring |
dps@ccod131 bak]$ var=abc1abc2abc3 && echo ${var/abc/ABC}
ABC1abc2abc3
[dps@ccod131 bak]$ var=abc1abc2abc3 && echo ${var//abc/ABC}
ABC1ABC2ABC3
[dps@ccod131 bak]$ var=abc1abc2abc3 && echo ${var/#abc/ABC}
ABC1abc2abc3
[dps@ccod131 bak]$ var=abc1abc2abc3 && echo ${var/%abc/ABC}
abc1abc2abc3
[dps@ccod131 bak]$ var=abc1abc2abc3 && echo ${var/%abc3/ABC}
abc1abc2ABC
shift
- 将命令参数左移,默认1位。可加参数
- 多应用于启动脚本中;
参考链接: https://blog.csdn.net/sdustliyang/article/details/9731277
[dps@ccod131 bak]$ cat shift.sh
#!/bin/bash
until [ $# -eq 0 ]
do
echo "当前第一的参数值${1},参数总数$#"
shift
done
[dps@ccod131 bak]$ ./shift.sh 1 2 3 4 5 6
当前第一的参数值1,参数总数6
当前第一的参数值2,参数总数5
当前第一的参数值3,参数总数4
当前第一的参数值4,参数总数3
当前第一的参数值5,参数总数2
当前第一的参数值6,参数总数1
[dps@ccod131 bak]$ cat shift.sh
#!/bin/bash
until [ $# -eq 0 ]
do
echo "当前第一的参数值${1},参数总数$#"
shift 3
done
[dps@ccod131 bak]$ ./shift.sh 1 2 3 4 5 6
当前第一的参数值1,参数总数6
当前第一的参数值4,参数总数3