欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

03从变量PS1到centos7配置文件到变量。转义字符介绍

程序员文章站 2022-05-13 21:22:05
...

内容介绍:

由于使用centos7,使用命令时,常常不知道命令提示符在哪一行,如果设置了颜色后,可以快速找到命令提示符所在行。而命令提示符发现可以通过变量PS1修改颜色,而临时设置了PS1变量后,一旦退出伪终端xshell后,再次登录后,发现变量PS1的值又变回原来的值。由此涉及的centos配置文件变量种类也了解了一下。最后命令提示符的颜色总算是再次登录或重启虚拟机也可以生效了。

1、     命令提示符颜色变量PS1

                查看变量PS1的内容如下图

            03从变量PS1到centos7配置文件到变量。转义字符介绍
            03从变量PS1到centos7配置文件到变量。转义字符介绍此处解释如下表格,下面4个都可以成功设置红色

PS1="\[\e[1;31;40m[\aaa@qq.com\h:\w ]\\$ \e[0m\]"  设置好后,用上下键查找历史命令时,命令提示符消失,命令提示符后输入字符,再按退格键,命令提示符也会被删除
PS1="\[\e[1;31;40m[\aaa@qq.com\h:\w ]\\$ \[\e[0m"    同上
PS1="\e[1;31;40m[\aaa@qq.com\h:\w ]\\$ \e[0m"            此处不会出现上述情况,但在xshell中粘贴命令执行时,会出现错位情况
3aaa@qq.com:~ ]# df|awk '$0 ~ /^\/dev\/sd/{print $5}'|awk -F% '{print $1}' 
16  
PS1="\[\e[1;31;40m\][\aaa@qq.com\h:\w ]\\$ \[\e[0m\]"    此处不会出现上述3种情况   。成对出现规则如此处的变量PS1
如下为我的centos6命令提示符颜色的设置
[aaa@qq.com ~ ]#cat /etc/profile.d/env.sh
PS1="\[\e[34m\][\aaa@qq.com\h \W ]\\$\[\e[0m\]
\[  

 \e[1;31;40m 或者\e可以用\033替代(0表示八进制)

 [\aaa@qq.com\h:\w]\$ \e[0m   \]
表示转义字符,启用解释功能  m后面是要设置颜色的字体;31到37表示字体颜色;40到47表示背景颜色。总共三个参数,以“;”分隔。无顺序之分  字体 颜色结束  解释功能结束符号                                   

 03从变量PS1到centos7配置文件到变量。转义字符介绍

[aaa@qq.com:~ ]# echo -e "\e[36m确认过眼神,不会错的\e[0m你开心就好"
确认过眼神,不会错的你开心就好
[aaa@qq.com:~ ]# 

echo 中的选项-e  表示启用解释功能,即\e代表特殊功能,不是字符\e


-----------------------------------详细解释请看下文---------------------------------------------------------------------------

            利用set和grep匹配出PS1为本地变量

            03从变量PS1到centos7配置文件到变量。转义字符介绍

            PS1=’[\aaa@qq.com\h \W]\$’ ,各个字段的意思如下表格

        \e等同于八进制  \033

        \u当前用户

        \h 当前主机名

        \H 主机名

        \w 当前工作目录

        \W 当前工作目录基名

        \t 24小时时间格式

        \T 12小时时间格式

        \! 命令历史数

        \# 开始后命令历史数

本处使用shell类型默认为bash,

在命令行输入:PS1="\[\e[1;31;40m\][\[\e[0;32;40m\]\aaa@qq.com\h:\[\e[1;35;40m\]\w\[\e[1;31;40m\]]\[\e[1;31;40m\]\\$\[\e[1;32;40m\]"

如下图:

03从变量PS1到centos7配置文件到变量。转义字符介绍

上述命令提示符颜色即可改变,但退回xshell再次登录,颜色就不生效了。

解决方法如下:

在全局配置文件/etc/profile.d/env.sh中(.sh的前缀可以随意设置),编辑:永久生效

PS1="\e[1;31;40m[\e[0;32;40m\aaa@qq.com\h:\e[1;35;40m\w\e[1;31;40m]\e[1;31;40m\\$\e[1;32;40m"  

03从变量PS1到centos7配置文件到变量。转义字符介绍

图中为root用户,应为#,\\$已经标红

其中\e[1;31;40m表示后面字符的颜色

如上图中的命令提示符的颜色

\[ \[    表示转义字符开始中括号
\] \]    表示转义字符结束中括号
\e[1;31;40m[
表示左[的颜色
\e[0;32;40m\aaa@qq.com\h:
表示\aaa@qq.com\h:的颜色
\e[1;35;40m\w
表示\w的颜色
\e[1;31;40m
表示右]的颜色
\e[1;31;40m\\$  
表示\$的颜色                    转义字符\\$  本文最底下
\e[1;32;40m 
表示命令提示符后面输入命令的颜色

上述颜色用来表示[\aaa@qq.com\h\w ] \$ 颜色:如[aaa@qq.com : ~]#

----------------------------------------------------------------------------------------

具体\e[1;31;40m含义如下:

\e表示颜色起始部分,也可以用\033代替

[左括号后面跟颜色设置,不能颜色功能用英文分号(;)分隔

  •   1 表示字体加粗,且有字体高亮功能,如上图中左括号的高亮红色。 0表示默认字体。4表示给字体加上下划线。5表示字体闪烁。7表示用亮色突出显示,来让你的文字更加醒目

        03从变量PS1到centos7配置文件到变量。转义字符介绍

  •   31表示字符颜色。

            可选颜色:红色、绿色、黄色、蓝色、洋红、青色和白色。他们对应的颜色代码是:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)

  •   40表示字符背景色。可选颜色 4041424344454647
  •   m表示后面是要设置颜色的字体

**************************************************************************************************

上述提到的全局配置文件/etc/profile.d/env.sh。如下介绍:

2、     centos7中bash的配置文件

  •   按生效范围划分,存在两类:

    •  全局配置:

        /etc/profile

        /etc/profile.d/*.sh

        /etc/bashrc

    •  个人配置:

        ~/.bash_profile

        ~/.bashrc

            I. 编辑配置文件生效

• 修改profile和bashrc文件后需生效两种方法:

        1重新启动shell进程

        2 . 或source

        例:

            . ~/.bashrc

.

            I. 重启后shell的登录方式

    • 交互式登录:

        (1)直接通过终端输入账号密码登录(登录图形化界面,登录tty,ssh,telnet)

        (2)使用“su - UserName” 切换的用户

                执行顺序:/etc/profile (登录默认触发,引用下一个配置文件)--> /etc/profile.d/*.sh --> ~/.bash_profile (登录默认读取,引用下一个配置文件)-->~/.bashrc--> /etc/bashrc

    • 非交互式登录:

        (1)  su UserName

        (2)图形界面下打开的终端

        (3)执行脚本    脚本是在子shell运行的

        (4)任何其它的bash实例

            执行顺序: ~/.bashrc --> /etc/bashrc--> /etc/profile.d/*.sh

  1.     Profile类

        •  按功能划分,存在两类:

                profile类和bashrc类

        •  profile类:为交互式登录的shell提供配置

                全局:/etc/profile,/etc/profile.d/*.sh    

                个人:~/.bash_profile

                功用:

                        (1)  用于定义环境变量

                        (2)  运行命令或脚本


        
   2.     Bashrc类

        •  bashrc类:为非交互式和交互式登录的shell提供配置

                全局:/etc/bashrc

                个人:~/.bashrc

                功用:

                        (1)  定义命令别名和函数

                        (2)  定义本地变量

3、    变量简单介绍

变量:命名的内存空间

            数据存储方式:

            字符:

            数值:整型,浮点型


变量:变量类型

    作用:

             1、数据存储格式                

             2、参与的运算

            3、表示的数据范围

    类型:

            字符

            数值:整型、浮点型

变量

• 强类型:变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换。一般定义变量时   必须指定类型、参与运算必须符合类型要求;调用未声明变量会产生错误

        如 java,c#

• 弱类型:语言的运行时会隐式做数据类型转换。无须指定类型,默认均为字符型;参与运算会自动   进行隐式类型转换;变量无须事先定义可直接调用

        如:bash 不支持浮点数,php

• 变量命名法则:

        1、不能使程序中的保留字:例如if, for

        2、只能使用数字、字母及下划线,且不能以数字开头

        3、见名知义

        4、统一命名规则:驼峰命名法

bash中变量的种类

 

• 根据变量的生效范围等标准划分下面变量类型:

    局部变量:生效范围为当前shell进程;对当前shell之外的其它shell  进程,包括当前shell的子shell进程均无效

    环境(全局)变量:生效范围为当前shell进程及其子进程

    本地变量:生效范围为当前shell进程中某代码片断,通常指函数

    位置变量:$1, $2,...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

    特殊变量:$?, $0, $*, aaa@qq.com, $#,$$

脚本在/app/下

[aaa@qq.com app ]#vim test1.sh

    #!/bin/bash

    echo '$1' is :$1

    echo '$2' is :$2

    echo '$3' is :$3

    echo '$4' is :$4

    #显示命令本身

    echo '$0' is :$0

    # 显示所有参数

    echo '$*' is :$*

    #显示所有参数(每个参数是独立的,如果在当前shell里面引用第二个sh脚本,并显示aaa@qq.com,则显示第一个独立参数)

    echo 'aaa@qq.com' is :aaa@qq.com 

     #参数个数

    echo '$#' is :$#   

[aaa@qq.com app ]# chmod +x 1.sh

[aaa@qq.com app ]# test1.sh {0..9}

-------------------------------------------------

说明aaa@qq.com与$*的区别

[aaa@qq.com app ]#vim a.sh

    #!/bin/bash

    echo a.sh:all arg are "$*"

    /app/b.sh "aaa@qq.com"

 

[aaa@qq.com app ]#vimb.sh

    #!/bin/bash

    echo b.sh 1st arg is $1

 

[aaa@qq.com app ]#chmod+x a.sh b.sh ;./a.sh  a b c 

    sh:all arg are a b c

    a

把aaa@qq.com换成$*后为:

[aaa@qq.com app ]#chmod+x a.sh b.sh ;./a.sh  a b c

    sh:all arg are a b c

    a b c 

变量要规范

    本地变量:父进程和子进程中的变量,只能对当前的进程有效;

    环境变量的声明:为了让子进程继承父进程的变量。定义环境变量1、export var1 ;2、declare -x var1  ;继承是往下继承的:即子进程继承父进程的,而不能反过来

    set可以看到所有的变量 ,env只看到环境变量,export ,declare -x


  局部变量

    变量赋值:name=‘value’

    • 可以使用引用value:

        (1)  可以是直接字串;name=“root"

        (2)  变量引用:name="$USER"

        (3)  命令引用:name=`COMMAND`  name=$(COMMAND)

    • 变量引用:${name}   $name

        "":弱引用,其中的变量引用会被替换为变量值

        '':强引用,其中的变量引用不会被替换为变量值,而保持原字符串

    • 显示已定义的所有变量:set

    • 删除变量:unsetname

  环境变量

     变量声明、赋值:

        export name=VALUE

        declare -x name=VALUE

    • 变量引用:$name,${name}

    • 显示所有环境变量:

        env

        printenv

        export

        declare -x

    • 删除变量:

        unset name

  bash内建的环境变量

        – PATH

        – SHELL

        – USER

        – UID

        – HOME

        – PWD

        – SHLVL

        – LANG

        – MAIL

        – HOSTNAME

        – HISTSIZE

        – —

  只读和位置变量

  •     只读变量:只能声明,但不能修改和删除

             声明只读变量:

                readonly name

                declare-r name 



03从变量PS1到centos7配置文件到变量。转义字符介绍:type declare 只读变量在当前shell退出时自动消失,只读变量在声明为环境变量时(export name),再打开一个子shell(bash),父shell只读变量在子shell会失去只读属性

         查看只读变量: readonly –p

  •  位置变量:在脚本代码中调用通过命令行传递给脚本的参数

        $1, $2, ...:对应第1、第2等参数,shift [n]换位置

        $0: 命令本身

        $*: 传递给脚本的所有参数,全部参数合为一个字符串

        aaa@qq.com: 传递给脚本的所有参数,每个参数为独立字符串

        $#: 传递给脚本的参数的个数

        aaa@qq.com  $* 只在被双引号包起来的时候才会有差异set -- 清空所有位置变量

---------------------------------------------

    Test.sh #!/bin/bash 

    echo $1

    Shift

    Echo $1

    [aaa@qq.com:~]#chmod +x Test.sh

    ./test.sh a b  c

   a

   b

----------------------------------------

----------------------------------------

readonly p1=3.14  declare -r ;readonly -p ;

name=test;(echo $name;name=222;echo $name);echo $name 

上述结果为:

test

222

test

解释:小括号在name=222处开启了一个子进程,命令结束后又回到父进程

-----------------------------------------------------

需求,用umask创建一个600权限的文件,并且不影响当前的umask值

      (umask 066;touch  /app/f1)

      (name=haha;touch/app/$name.log)

      (ls:pwd)> /app/all.log 前面讲到的所谓命令行扩展()及``

-----------------------------------------------------------

03从变量PS1到centos7配置文件到变量。转义字符介绍如果按照变量永久生效和临时生效来说,可以定义一个变量生存周期,而生存周期:永久生效则需要修改配置文件,同时注意用户对象及登录方式;临时生效则定义一个变量即可,需要注意变量生效范围



4、转义字符


         1、反斜线(\)会使随后的字符按原意解释

                    $ echo Yourcost: \$5.00

                    Your cost: $5.00

          2、 单引号(’’):转义其中所有的变量为字符串

          3、 加引号来防止扩展 (保留其中的变量属性,不进行转义)

                –  单引号(’)防止所有扩展,即’ ’单引号里面的字符就代表字符本意

                –  双引号(”)也防止所有扩展,但是以下情况例外:

                       $(美元符号)  -  变量扩展  双引号里面的$不代表字符本意,表示其后面是一个变量

                       `(反引号)   -  命令替换 ,反引号里面有特殊含义的按照特殊含义解释。如cd是切换目录

                       \(反斜线)   -  禁止单个字符扩展,\$ 表示$字符,不代表变量

                       !(叹号) -  历史命令替换

          4、反引号(``):把其中的命令执行后返回结果

       03从变量PS1到centos7配置文件到变量。转义字符介绍

       03从变量PS1到centos7配置文件到变量。转义字符介绍 

                命令行扩展:反引号(``)或者$()