变量子串
常用点:

#定义TOMCAT变量,内容为"I am tomcat"
[root@localhost ~]# TOMCAT="I am tomcat" [root@localhost ~]# echo ${TOMCAT} I am tomcat
1.返回字符串TOMCAT变量字符串的长度
[root@localhost ~]# echo ${#TOMCAT} 11 补充: [root@localhost ~]# echo $TOMCAT |wc -m 12
2.截取TOMCAT变量字符串从第2个字符之后开始取,默认取后面字符的全部,第2个字符不包含在内。
也可理解为:删除前面的多少个字符
[root@localhost ~]# echo ${TOMCAT:2} am tomcat
3. 截取TOMCAT变量字符串从第2个字符之后开始取,取两个字符
[root@localhost ~]# echo ${TOMCAT:2:2} am 补充:类似cut -c [root@localhost ~]# echo ${TOMCAT} |cut -c 1-4 I am [root@localhost ~]# echo ${TOMCAT} |cut -c 3-4 am
4. 从变量$TOMCAT开头开始删除最短匹配 "I am" 子串
[root@localhost ~]# echo ${TOMCAT#I am} tomcat
5.从变量$TOMCAT开头开始删除最长匹配 “I am tom”子串
[root@localhost ~]# echo ${TOMCAT##I am tom} cat
6.从变量$TOMCAT结尾开始删除最短匹配 tomcat 子串
[root@localhost ~]# echo ${TOMCAT%tomcat} I am
7.从变量$TOMCAT结尾开始删除最长匹配cat子串 #?
[root@localhost ~]# echo ${TOMCAT%%cat} I am tom
8.使用Jerry字符串,来代替变量$TOMCAT第一个匹配的tomcat字符串
[root@localhost ~]# echo ${TOMCAT/tomcat/Jerry} I am Jerry
9.使用Jerry字符串,来代替从变量$TOMCAT结尾开始匹配的tomcat字符串
[root@localhost ~]# echo ${TOMCAT/%tomcat/Jerry} I am Jerry
10.使用 He is 字符串,来代替从变量$TOMCAT开头开始匹配的 I am 字符串
[root@localhost ~]# echo ${TOMCAT/#I am/He is} #同一规律 #从开头开始,%从结尾开始 He is tomcat
#示例文件
stu_102999_1_finished.jpg
stu_102999_2_finished.jpg
stu_102999_3_finished.jpg
A.变量结尾删除
功能描述:

[root@localhost test]# ls stu_102999_1_finished.jpg stu_102999_2_finished.jpg stu_102999_3_finished.jpg [root@localhost test]# vim cf.sh #脚本内容 #!/bin/bash for i in `ls *.jpg` do mv $i `echo ${i%finished*}.jpg` done [root@localhost test]# bash cf.sh [root@localhost test]# ls cf.sh stu_102999_1_.jpg stu_102999_2_.jpg stu_102999_3_.jpg [root@localhost test]# bash cf.sh cf.sh: line 4: stu_102999_1_.jpg: command not found mv: 在"stu_102999_1_finished.jpg" 后缺少了要操作的目标文件 #加 echo 请尝试执行"mv --help"来获取更多信息。
B. 变量结尾替换
把文件的大写扩展名变小写扩展名
[root@localhost test]# s="stu_102999_4_.jpg" [root@localhost test]# echo $s stu_102999_4_.jpg [root@localhost test]# echo "${s/%jpg/JPG}" stu_102999_4_.JPG [root@localhost test]# cat cf.sh #!/bin/bash for i in `ls *.jpg` do mv $i $(echo ${i/%jpg/JPG}) done [root@localhost test]# ls stu_102999_2_.JPG stu_102999_4_.JPG stu_102999_1_.JPG stu_102999_3_.JPG
[root@localhost test]# ls c1.TXT c2.TXT c3.TXT [root@localhost test]# vim fs.sh #脚本内容 for i in $(ls ./*.TXT) do mv $i $(echo "${i/%TXT/txt}") #使用变量替换 #mv $i $(echo $i|sed 's/TXT/txt/g') #使用sed done [root@localhost test]# bash fs.sh [root@localhost test]# ls c1.txt c2.txt c3.txt fs.sh
C.rename
命令名称:Rename files 命令功能:给文件重命名 命令语法:rename from to file

[root@localhost test]# ls c1.txt c2.txt c3.txt [root@localhost test]# rename .txt .HTM *.txt [root@localhost test]# ls c1.HTM c2.HTM c3.HTM
其它:


1. ${value:-word}
当变量未定义或者值为空,返回值为word内容,否则返回变量的值
作用:判断变量是否没有定义
[root@localhost ~]# result=${test:-UNSET} [root@localhost ~]# echo $result UNSET [root@localhost ~]# echo $test #----》空 [root@localhost ~]# 结论:当test变量没内容是,就返回后面的UNSET [root@localhost ~]# name=Tom [root@localhost ~]# res=${name:-UNSET} [root@localhost ~]# echo $res Tom 结论:当name变量有内容时,就返回name变量的内容
2. ${value:=word}
[root@localhost ~]# res=${test:=UNSET} [root@localhost ~]# echo $res UNSET [root@localhost ~]# echo $test UNSET 结论:当test没有值,将UNSET赋值给test
3. ${value:?"word"}
[root@localhost ~]# echo ${value:? "Not defined"} -bash: value: Not defined [root@localhost ~]# value=123 [root@localhost ~]# echo ${value:? "Not defined"} 123 [root@localhost ~]# unset value [root@localhost ~]# echo ${value:? "Not defined"} -bash: value: Not defined 提示:用于捕捉由于变量未定义而导致的错误,如:“Not defined”
4. ${value:+word}
[root@localhost ~]# res=${value:+123} [root@localhost ~]# echo $res [root@localhost ~]# value=Tom [root@localhost ~]# echo $res [root@localhost ~]# res=${value:+123} [root@localhost ~]# echo $res 123 提示:可用于测试变量是否存在
5.${value-word}去掉冒号
[root@localhost ~]# httpd=${HTTPD-/usr/sbin/httpd} [root@localhost ~]# pidfile=${PIDFILE-/var/run/httpd.pid} [root@localhost ~]# echo $httpd $pidfile /usr/sbin/httpd /var/run/httpd.pid [root@localhost ~]# echo $HTTPD $PIDFILE [root@localhost ~]# 结论:变量没定义就用 -号 后面的替代
#Apache的使用案例:/etc/init.d/httpd
apachectl=/usr/sbin/apachectl httpd=${HTTPD-/usr/sbin/httpd} prog=httpd pidfile=${PIDFILE-/var/run/httpd/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd} RETVAL=0 STOP_TIMEOUT=${STOP_TIMEOUT-10}
#对变量的路径进行操作,最好先判断路径是不是非空。特别是的删除操作,有危险。
有路径:
[root@localhost ~]# cat del_path.sh path=/server/backup/ #有路径,删除的是 /server/backup 下的 .tar.gz find ${path:=/tmp/} -name "*.tar.gz" -type f|xargs rm -rf [root@localhost ~]# ll /server/backup/ -rw-r--r-- 1 root root 0 11月 5 18:02 a.tar.gz -rw-r--r-- 1 root root 0 11月 5 18:03 test.TXT [root@localhost ~]# bash del_path.sh [root@localhost ~]# ll /server/backup/ -rw-r--r-- 1 root root 0 11月 5 18:03 test.TXT
无路径:
[root@localhost ~]# sed -i '1d' del_path.sh [root@localhost ~]# cat del_path.sh #无路径,会删除 /tmp/下的 .tar.gz 文件 find ${path:=/tmp/} -name "*.tar.gz" -type f|xargs rm -rf
[root@localhost ~]# ll /tmp/

浙公网安备 33010602011771号