1、获取上一个命令返回值、执行脚本的pid
rlk@rlk:shell$ cat ./test1.sh
#!/bin/bash
ls
#获取上一个命令、脚本的返回值。linux中,默认返回值0表示成功,其他的返回值表示失败
echo "\$?=$?"
#获取执行当前脚本的pid(进程号)
echo "\$$=$$"
rlk@rlk:shell$ ./test1.sh
test1.sh
$?=0
$$=739873
rlk@rlk:shell$
2、变量子串
| 功能 | 表达式 |
|---|---|
| 统计变量的长度 | ${#parameter} |
| 删除变量开头的字符 | ${parameter#word} ${parameter##word} |
| 删除变量结尾的描述符 | ${parameter%word} ${parameter%%word} |
| 截取变量 | ${parameter:开始截取的位置:截取的长度} |
| 变量替换 | ${parameter/要被替换的字符/替换的字符 ${parameter//要被替换的字符/替换的字符} |
- parameter表示命令名
- word:表示要匹配的字符串
2.1、统计变量的字符长度
rlk@rlk:shell$ cat ./test1.sh
#!/bin/bash
temp=abcdef
echo "\${#parameter}=${#temp}"
rlk@rlk:shell$
rlk@rlk:shell$ ./test1.sh
${#parameter}=6
- ${#parameter}表示统计变量的字符长度(parameter表示变量名)
2.2、删除字符
2.2.1、从左边开始删除
rlk@rlk:shell$ cat test1.sh
#!/bin/bash
temp=boyboygirlgirl
#从变量左边第一个字符开始匹配,按照最短匹配删除。当需要删除掉开头某几个字符时可以使用
echo "\${temp#boy}=${temp#boy}"
echo "\${temp#*boy}=${temp#*boy}"
#从变量左边第一个字符开始匹配,按照最长匹配删除,一般都是和*号一起使用。
#当需要删除掉开头的字符串,并且字符串的结尾是固定的
echo "\${temp##boy}=${temp##boy}"
echo "\${temp##*boy}=${temp##*boy}"
rlk@rlk:shell$
rlk@rlk:shell$ ./test1.sh
${temp#boy}=boygirlgirl
${temp#*boy}=boygirlgirl
${temp##boy}=boygirlgirl
${temp##*boy}=girlgirl
2.2.2、删除开头字符串的使用场景:获取文件名
rlk@rlk:shell$ cat test.sh
#!/bin/bash
temp=/mnt/hgfs/share_file_Ubuntu/shell/test.sh
#把最后一个斜杠之前的内容都删除,保留文件名
echo "\${temp##*/}=${temp##*/}"
#使用basename命令是同样的效果
basename ${temp}
rlk@rlk:shell$
rlk@rlk:shell$ ./test.sh
${temp##*/}=test.sh
test.sh
2.2.3、从右边开始删除
rlk@rlk:shell$ cat ./test.sh
#!/bin/bash
temp=boyboygirlgirl
echo ${temp}
echo "\${temp%girl}=${temp%girl}"
echo "\${temp%*girl}=${temp%girl}"
echo "\${temp%%girl}=${temp%%girl}"
echo "\${temp%%*girl}=${temp%%girl*}"
rlk@rlk:shell$
rlk@rlk:shell$ ./test.sh
boyboygirlgirl
${temp%girl}=boyboygirl
${temp%*girl}=boyboygirl
${temp%%girl}=boyboygirl
${temp%%*girl}=boyboy
2.2.4、删除结尾字符串的使用场景:获取文件路径
rlk@rlk:shell$ cat ./test.sh
#!/bin/bash
temp=/mnt/hgfs/share_file_Ubuntu/shell/test.sh
#把最后一个斜杠之前的内容都删除,保留文件名
echo "\${temp%*/}=${temp%/*}"
#使用dirname命令是同样的效果
dirname ${temp}
rlk@rlk:shell$
rlk@rlk:shell$ ./test.sh
${temp%*/}=/mnt/hgfs/share_file_Ubuntu/shell
/mnt/hgfs/share_file_Ubuntu/shell
2.3、截取部分字符
rlk@rlk:shell$ cat test.sh
#!/bin/bash
temp=1122boygirl
#省略截取长度,则是全部截取
echo "\${temp:3}=${temp:3}"
#指定截取长度
echo "\${temp:3:4}=${temp:3:4}"
rlk@rlk:shell$
rlk@rlk:shell$ ./test.sh
${temp:3}=2boygirl
${temp:3:4}=2boy
- 注意:第一个字符的下标是0
2.4、替换字符
rlk@rlk:shell$ cat test.sh
#!/bin/bash
temp=boygirl@@boygirl778899
#只替换第一个
echo "\${temp/boy/girl}=${temp/boy/girl}"
#把匹配上的都替换掉
echo "\${temp//boy/girl}=${temp//boy/girl}"
#可以使用通配符,比如:把所有数字都用*替换
echo "\${temp//[0-9]/*}=${temp//[0-9]/*}"
rlk@rlk:shell$
rlk@rlk:shell$ ./test.sh
${temp/boy/girl}=girlgirl@@boygirl778899
${temp//boy/girl}=girlgirl@@girlgirl778899
${temp//[0-9]/*}=boygirl@@boygirl******
补充:
- 上面的变量子串,都有对应的命令来实现同样的功能,比如:basename、dirname、sed、awk等命令
- 实现同样的功能,使用shell内置的特性比调用操作系统命令更快
3085

被折叠的 条评论
为什么被折叠?



