bash颜色的显示规则:
调用了ASCII编码对于颜色的设置方案;
Ctrl键:\033
[:控制字符和颜色代码之间的分隔符;
所有的颜色代码都应该使用m结尾
颜色代码:
0:表示关闭颜色显示属性,恢复为黑白色;
1:加粗显示文本字符;
4:为文本字符添加下划线标识;
5:使文本字符闪烁;
7:将文本字符的背景颜色和前景颜色交换;
8:将文本字符的背景颜色设置为与前景色相同;
30-39:设置文本字符的前景色,38,39为保留暂时未被使用;
30为灰色;31为红色;32为绿色;33是×××;34为蓝色;35为紫色;36为靛蓝色;37为白色;38,39保留但是默认为黑色;
40-49:设置文本字符的背景色,48,49为保留暂时未被使用;
40为黑色背景;41为红色背景;42为绿色背景;43为×××背景;44为蓝色背景;45为紫色背景;46为靛蓝色背景;47为灰色背景;
注意:此类控制字符和颜色代码必须放置在echo -e模式中,否则Ctrl不生效,颜色后面必须加m;
示例:
加粗显示文本;加下划线;闪烁;前景色为靛蓝;背景色为绿色;
\\在这个命令行中,必须\033[0m结尾,否则,会对全局颜色进行变化显示生效;
bash配置文件:
程序的组成部分:
一个完整的程序,一般包括四类文件:
二进制文件:一个程序的执行主体
头文件和库文件:程序的开发包库;程序的库调用;调用库的接口
帮助文件:例如man手册
配置文件:定义变量
bash——CLI(命令行界面接口)中的一种;
bash同样属于一种完整的应用程序,上述四类文件,bash都有:
二进制文件: /bin/bash
头文件和库文件:/lib64/
帮助文件:/usr/share/man/man1/bash.1.gz
配置文件:
三类:
1.profile类:
为交互式登录的shell进程实现功能初始化的配置文件;
2.bashrc类:
为非交互式登录的shell进程实现功能启动配置文件;
3.logout类:
为交互式登录的shell进程提供终止及清理类功能的配置文件;
bash的类型:
1.交互式登录的bash:
1)直接通过某个终端输入账户信息和密码之后打开的bash进程;
2)su -|-l USERNAME执行切换登录打开的bash进程;
配置文件的加载顺序:
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
2.非交互式登录的bash
1)在图像界面下,通过菜单项或右键菜单打开的终端所启动的bash进程;
2)使用su USERNAME执行切换登录打开的bash进程;
配置文件的加载顺序:
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
bash的配置文件:
1.profile类:
全局配置文件:
/etc/profile
/etc/profile.d/*sh
注意:在RHEL或centOS系列的发行版操作系统中,通常会存在这样的情况;如果一个配置文件的内容很多,格式复杂,将会尝试奖此配置文件切割拆分为多个片段配置文件,往往把最核心最主要的配置留在主配置文件中,将一些附属的或者扩展的配置内容分散存放到各个片段配置文件中;而被切分出来的片段文件一般会统一保存在"程序名称.d"命名格式的目录中;而我们约定,在这类目录中保存的片段配置文件的后缀名称会是统一的字符串;
个人配置文件:
一般保存在用户的家目录下,路径:~/.bash_profile
profile类配置文件的作用:
1.用于定义用户的环境变量;
2.用于运行脚本或者执行命令;
2.bashrc类:
全局配置文件:
/etc/bashrc
个人配置文件:
~/.bashrc
bashrc类配置文件的作用:
1.用于定义本地变量;
2.用于定义命令别名;
3.用于定义umask;
注意:只有root用户能够修改全局类配置文件,普通用户只能修改其家目录中属于个人的配置文件
为什么要给bash使用配置文件?
所有利用bash命令行完成的命令操作,只有没有涉及到文件修改的,一般都只是针对当前的shell生效,一旦shell进程结束,则此前所有的操作的生命周期就到头了即配置失效;
配置文件的作用:
1.能够使用用户赖以生存的配置信息长期有效;
2.能够让用户保存此前的配置内容;
让配置文件中新进修改的内容生效:
1.注销重新登录,打开新的shell进程;
2.使用source命令,直接使在当前shell中生效;
3.exec命令(与source命令相似);
3.logout类:
只有个人配置文件:
~/bash_logout
作用:在关闭shell进程之前,清楚某些用户自定义的配置,删除某些临时文件或目录,以及撤销用户此前定义的变量,清理某些可能会引发安全问题的隐患等操作;
bash的变量中存放的字符串的处理方式:
bash变量:
弱变量:
1.无须事先定义即可使用;
2.bash变量没有数据类型的硬性要求,默认是字符型;
1.字符串切片:
定义变量VAR
[root@localhost ~]# VAR=HELLOworld
[root@localhost ~]# echo $VAR
HELLOworld
${#VAR}:返回字符类型变量的变量值长度;
[root@localhost ~]# echo ${#VAR}
10 ---HELLOworld这个字符有10个字节长度
${VAR:OFFSET}:返回字符型变量中第“offset”位置之后的内容,不包括第“offset”位置的字符;offset取值范围为:0-$[{#VAR}-1]
[root@localhost ~]# echo ${VAR:5} ---返回第5个且不包括第五个字符位置之后的字符
world
${VAR:offset:number}:返回字符型变量中从第“offset”个字符后开始长度为“number”的字符部分;
[root@localhost ~]# echo ${VAR:5:4}
worl
${VAR: -length}:取字符型变量字符串最右侧的“length”个字符;
[root@localhost ~]# echo ${VAR: -4} ---必须加空格,否则命令不生效
orld
注意:在“-length”之前要留有空格。
2.基于模式(PATTERN)取字符串:
定义变量VAR1
[root@localhost ~]# VAR1=aabbcc111222
${VAR#*PATTERN}:自左而右,查找VAR变量所存储的字符串中,第一次被PATTERN匹配的字符,删除从字符串开始到PATTERN匹配的字符间的所有字符;
[root@localhost ~]# echo ${VAR1#*1}
11222
${VAR##*PATTERN}:自左而右,查找VAR变量所存储的字符串中,所有被PATTERN匹配的字符,删除从字符串开始到最后一次PATTERN匹配的字符间的所有字符;
[root@localhost ~]# echo ${VAR1##*1}
222
${VAR%PATTERN*}:自右而左,查找VAR变量所存储的字符串中,第一次被PATTERN匹配的字符,删除从字符串结尾到PATTERN匹配的字符间的所有字符;
[root@localhost ~]# echo ${VAR1%1*}
aabbcc11
${VAR%%PATTERN*}:自右而左,查找VAR变量所存储的字符串中,所有被PATTERN匹配的字符,删除从字符串结尾到最后一个PATTERN匹配的字符间的所有字符;
[root@localhost ~]# echo ${VAR1%%1*}
aabbcc
3.查找替换:
定义变量MYPATH
[root@localhost ~]# MYPATH=/tmp/tmp1/tmp2/tmp3-testwork
${VAR/PATTERN/SUBSTRING}:在VAR变量中,自左而右查找能够被PATTERN匹配的内容,将其中第一个匹配到的结果更换成SUBSTRING;
[root@localhost ~]# echo ${MYPATH/1/0}
/tmp/tmp0/tmp2/tmp3-testwork
${VAR//PATTERN/SUBSTRING}:在VAR变量中,自左而右查找能够被PATTERN匹配的内容,将所有能够匹配到的结果更换成SUBSTRING;
[root@localhost ~]# echo ${MYPATH//p/Y}
/tmY/tmY1/tmY2/tmY3-testwork
${VAR/#PATTERN/SUBSTRING}:在VAR变量中,查找行首被PATTERN匹配的内容,将匹配到的结果更换成SUBSTRING;
[root@localhost ~]# echo ${MYPATH/#//Y}
/Y/tmp/tmp1/tmp2/tmp3-testwork
${VAR/%PATTERN/SUBSTRING}:在VAR变量中,查找行尾被PATTERN匹配的内容,将匹配到的结果更换成SUBSTRING;
[root@localhost ~]# echo ${MYPATH/%testwork/Y}
/tmp/tmp1/tmp2/tmp3-Y
4.查找删除:
还是使用变量MYPATH
${VAR/PATTERN}:在VAR变量中,自左而右查找能够被PATTERN匹配的内容,将其中第一个匹配到的结果删除;
[root@localhost ~]# echo ${MYPATH/p}
/tm/tmp1/tmp2/tmp3-testwork
${VAR//PATTERN}:在VAR变量中,自左而右查找能够被PATTERN匹配的内容,将其中所有匹配到的结果删除;
[root@localhost ~]# echo ${MYPATH//p}
/tm/tm1/tm2/tm3-testwork
${VAR/#PATTERN}:在VAR变量中,查找行首被PATTERN匹配的内容,将匹配到的结果删除;
[root@localhost ~]# echo ${MYPATH/#'/tmp'}
/tmp1/tmp2/tmp3-testwork
${VAR/%PATTERN}:在VAR变量中,查找行尾被PATTERN匹配的内容,将匹配到的结果删除;
[root@localhost ~]# echo ${MYPATH/%'testwork'}
/tmp/tmp1/tmp2/tmp3-
5.字符串的大小写转换:
${VAR^^}:将VAR变量中所有的小写字母转换为大写字母;
[root@localhost ~]# echo ${MYPATH^^}
/TMP/TMP1/TMP2/TMP3-TESTWORK
${VAR,,}:将VAR变量中所有的大写字母转换为小写字母;
6.变量的赋值:
使用已定义的变量VAR1
${VAR:-value}:如果变量VAR为空值,或者变量未被定义,那么就直接返回value中的值,否则就返回变量VAR中的值;
[root@localhost ~]# echo ${VAR1:-1111} ---因变量已被定义,所以返回value中的值
aabbcc111222
${VAR:+value}:如果变量VAR已经定义且不为空,则返回value中的值;
[root@localhost ~]# echo ${VAR1:+1111} ---因变量已被定义且不为空,返回value的值
1111
${VAR:=value}:如果变量VAR为空值,或者变量未被定义,那么就直接返回value中的值,并且将value的值赋给变量VAR,否则返回变量VAR的值;
[root@localhost ~]# VAR2=
[root@localhost ~]# echo ${VAR2:=1111} ---定义变量VAR2为空,直接返回value的值
1111
[root@localhost ~]# echo ${VAR1:=1111} ---变量VAR1已被定义,返回VAR1的值
aabbcc111222
7.变量的间接引用:
如果第一个变量的值恰好是第二个变量的变量名,那么从第一个变量引用第二个变量的值的方法,就称为变量的间接引用;
如:VAR1=VAR2,VAR2=hellolink
bash提供了这样的间接变量的引用方法:
eval MYVAR=\$$VAR1
例:
[root@localhost ~]# VAR3=VAR4
[root@localhost ~]# VAR4=12345
[root@localhost ~]# eval MYVAR=\$$VAR3
[root@localhost ~]# echo $MYVAR
12345