变量子串

 常用点:

   

 

 

#定义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
使用变量和sed

 

 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/

 

posted @ 2018-07-10 00:13  shadow3  阅读(227)  评论(0)    收藏  举报