九游登录方式

2019-11-06由程序员日记发表于系统教程 浏览37次

目录

一、为什么使用${}引用变量

1、$a和${a}的效果与区别

因为个别特殊字符会影响正常引用,所以需要使用${}引用变量,加花括号是为了帮助解释器识别变量的边界

$a和${a}效果一样,当变量后面连接其他字符的时候必须给变量加上大括号${a}_bc

[[email protected] ~]# VAR=111
[[email protected] ~]# echo $VAR11

[[email protected] ~]# echo $VAR
111
[[email protected] ~]# echo ${VAR}222
111222
[[email protected] ~]#   

2、变量小知识补充

1)定义变量的三种方式

[[email protected] ~]# a=111
[[email protected] ~]# b='111'
[[email protected] ~]# c="111"
[[email protected] ~]# a=111-$a
[[email protected] ~]# b='111-$a'
[[email protected] ~]# c="111-$a"
[[email protected] ~]# echo "a=$a"
a=111-111
[[email protected] ~]# echo "c=${c}"        <---$变量名表示输出变量,可以用$c或者${c}两种用法
c=111-111-111 <br></br>[[email protected] ~]# echo "b=$b" <br></br>b=111-$a <br></br>[[email protected] ~]#

不加引号,当内容为简单连续的数字、字符串、路径名时,可以使用,值里面有变量会被解释后再输出

加单引号,输出变量内容时,单引号里面是啥就输出啥即使是变量或命令(命令需要反引起来),这种比较适合显示纯字符串的请看

加双引号,输出变量内容时引号里的变量及命令会经过解析后再输出内容,这种就比较适合字符串中附带有变量及命令且向将其解析后再输出的变量定义

2)把一个命令结果作为变量的内容赋值的两种方法

变量名=ls <---反引号引起来,缺点容易和单引号弄混

变量名=$(ls) <---可以使用这种方法

示例1

[[email protected] ~]# hh=`ls`
[[email protected] ~]# echo $hh
anaconda-ks.cfg bash-test Desktop Downloads google-chrome-stable_current_x86_64.rpm initial-setup-ks.cfg original-ks.cfg
[[email protected] ~]# hh1=$(ls)
[[email protected] ~]# echo $hh1
anaconda-ks.cfg bash-test Desktop Downloads google-chrome-stable_current_x86_64.rpm initial-setup-ks.cfg original-ks.cfg
[[email protected] ~]# 

3)详细参考请参见

shell 学习笔记1-什么是shell,shell变量

二、字符串文本实例

1、获取字符串长度

<br></br>[[email protected] ~]# HLWD='hello world!'
[[email protected] ~]# echo $HLWD
hello world!
[[email protected] ~]# echo  ${#HLWD}
12
[[email protected] ~]# 

2、字符串切片

${parameter:offset}

${parameter:offset:length}

获取从offset个字符开始,向后length个字符

获取hello字符串<br></br>[[email protected] ~]# echo ${HLWD:0:5}
hello
获取从第二个字符后的一个字符<br></br>[[email protected] ~]# echo ${HLWD:2:1}
l
获取从第六个字符后两个字符<br></br>[[email protected] ~]# echo ${HLWD:6:2}
wo<br></br>获取第五字符后面的字符
[[email protected] ~]# echo ${HLWD:6}
world!<br></br>获取第五字符后面的字符
[[email protected] ~]# echo ${HLWD:5}
world!<br></br>获取-1字符之后的字符<br></br>
[[email protected] ~]# echo ${HLWD:-1}
hello world!
获取最后一个字符<br></br>[[email protected] ~]# echo ${HLWD:(-1)}
!
获取最后两个字符<br></br>[[email protected] ~]# echo ${HLWD:(-2)}
d!

获取从倒数第三个字符后的2个字符

[[email protected] ~]# echo ${HLWD:(-3):3}
ld!
[[email protected] ~]#

 

3、替换字符串

格式:${parameter/pattern/string}

[[email protected] ~]# VAR='hello world world!'   
将第一个world字符串替换为WORLD
[[email protected] ~]# echo ${VAR/world/WORLD}
hello WORLD world!
将全部的world替换为WORLD
[[email protected] ~]# echo ${VAR//world/WORLD} 
hello WORLD WORLD!

[[email protected] ~]# VAR=123abc
替换正则表达式为空
[[email protected] ~]# echo ${VAR//[^0-9]/}
123
[[email protected] ~]# echo ${VAR/[0-9]/}
23abc
[[email protected] ~]# echo ${VAR/[0-9][0-9][0-9]/}
abc

4、字符串截取

格式:${parameter#word} 删除匹配前缀

${parameter##word}

${parameter%word} 删除匹配后缀

${parameter%%word}

说明:#去掉左边,最短匹配模式,##最长匹配模式

#去掉右边,最短匹配模式,%%最长匹配模式

如果变量为空就返回hello world!
[[email protected] ~]# VAR=
[[email protected] ~]# echo ${VAR:-'hello world!'}
hello world!
如果变量不为空就返回hello world!
[[email protected] ~]# VAR="hello"
[[email protected] ~]# echo ${VAR:+' world!'}
 world!
[[email protected] ~]# echo ${VAR:+'hello world!'}
hello world!
如果变量空就重新赋值
[[email protected] ~]# 
[[email protected] ~]# VAR=
[[email protected] ~]# echo ${VAR:=hello}
hello
[[email protected] ~]# echo $VAR
hello
如果变量为空就将信息输出stderr
[[email protected] ~]# VAR=
[[email protected] ~]# echo ${VAR:?value is null }
-bash: VAR: value is null 

5、字符串颜色

shell-基础2-字符串文本处理${}教程

使用方法请见shell 学习笔记8-case条件语句里面的2-3小节

参考:《shell从入门到精通》---李振良

转载请注明出处: https://www.cnblogs.com/zhangxingeng/p/11794283.html