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;


示例:

加粗显示文本;加下划线;闪烁;前景色为靛蓝;背景色为绿色;

86b9f77018544a036a554224cc58dd1b.png

\\在这个命令行中,必须\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