内容介绍:

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

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

查看变量PS1的内容如下图


            此处解释如下表格,下面4个都可以成功设置红色

PS1="\[\e[1;31;40m[\u@\h:\w ]\\$ \e[0m\]"  设置好后,用上下键查找历史命令时,命令提示符消失,命令提示符后输入字符,再按退格键,命令提示符也会被删除
PS1="\[\e[1;31;40m[\u@\h:\w ]\\$ \[\e[0m"    同上
PS1="\e[1;31;40m[\u@\h:\w ]\\$ \e[0m"            此处不会出现上述情况,但在xshell中粘贴命令执行时,会出现错位情况

3root@centos7:~ ]# df|awk '$0 ~ /^\/dev\/sd/{print $5}'|awk -F% '{print $1}'
16  root@centos7:~ ]# df|awk '$0 ~ /^\/dev\/sd/{print $5}'|awk -F% '{print $1}'
16  

PS1="\[\e[1;31;40m\][\u@\h:\w ]\\$ \[\e[0m\]"    此处不会出现上述3种情况   。成对出现规则如此处的变量PS1;或者PS1='\[\e[1;31;40m\][\u@\h:\w ]\$ \[\e[0m\]'

如下为我的centos6命令提示符颜色的设置

[root@centos6 ~ ]#cat /etc/profile.d/env.sh
PS1="\[\e[34m\][\u@\h \W ]\\$\[\e[0m\]
\[  

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

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

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

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

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

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

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

•        \e等同于八进制  \033

•        \u当前用户

•        \h 当前主机名

•        \H 主机名

•        \w 当前工作目录

•        \W 当前工作目录基名

•        \t 24小时时间格式

•        \T 12小时时间格式

•        \! 命令历史数

•        \# 开始后命令历史数

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

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

如下图:

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

解决方法如下:

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

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

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

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

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

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

上述颜色用来表示[\u@\h\w ] \$ 颜色:如[root@centos7 : ~]#

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

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

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

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

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

  • 31表示字符颜色。

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

  • 40表示字符背景色。可选颜色 40、41、42、43、44、45、46、47
  • 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, $*, $@, $#,$$

脚本在/app/下

[root@centos7 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脚本,并显示$@,则显示第一个独立参数)

echo '$@' is :$@

#参数个数

echo '$#' is :$#

[root@centos7 app ]# chmod +x 1.sh

[root@centos7 app ]# test1.sh {0..9}

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

说明$@与$*的区别

[root@centos7 app ]#vim a.sh

#!/bin/bash

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

/app/b.sh "$@"

[root@centos7 app ]#vimb.sh

#!/bin/bash

echo b.sh 1st arg is $1

[root@centos7 app ]#chmod+x a.sh b.sh ;./a.sh  a b c

sh:all arg are a b c

a

把$@换成$*后为:

[root@centos7 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

:type declare 只读变量在当前shell退出时自动消失,只读变量在声明为环境变量时(export name),再打开一个子shell(bash),父shell只读变量在子shell会失去只读属性

查看只读变量: readonly –p

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

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

$0: 命令本身

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

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

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

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

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

Test.sh #!/bin/bash

echo $1

Shift

Echo $1

[root@centos7:~]#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 前面讲到的所谓命令行扩展()及``

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

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

4、转义字符

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

$ echo Yourcost: \$5.00

Your cost: $5.00

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

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

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

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

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

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

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

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

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

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

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

  1. bash下变量PS1的完整理解

    本文并不会讲解如何设置PS1以获得你喜欢的提示符:本文会围绕PS1这个变量,就其涉及到的一些概念展开讨论 导言 ubuntu 的默认 shell 是 bash,bash 下有个变量 PS1,我们在 l ...

  2. centos配置c语言环境变量,CentOS7设置环境变量

    一.环境变量的概念 1.环境变量的含义 程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的. 2.环境变量的分类 1)按生效的范围分类. 系统环境变量:公共的,对全部的 ...

  3. CentOS7设置环境变量

    文章目录 一.环境变量的概念 1.环境变量的含义 2.环境变量的分类 3.Linux环境变量 二.常用的环境变量 1.查看环境变量 2.常用的环境变量 三.设置环境量 1.系统环境变量 2.用户环境变 ...

  4. linux环境变量PS1设置完整版附带颜色

    linux环境变量PS1设置 ------------------------------------------------------------------------------------- ...

  5. linux下环境变量PS1设置

    为什么80%的码农都做不了架构师?>>>    linux下环境变量PS1简单来说就是设置命令提示符显示的内容,如下: root@10.1.1.200:~# PS1变量中提示符各项含 ...

  6. 1vmware中的centos7配置静态变量

    vmware中的centos7配置静态变量 安装centos7时推荐最小化安装,避免占用过多资源 问题: 解决虚机中的Centos7连不上网 https://blog.csdn.net/u014271 ...

  7. 《MYSQL是怎样运行的》笔记|配置文件|系统变量|字符集|InnoDB存储结构|数据页结构|索引结构与使用|数据目录|表空间|连表原理|查询优化|BufferPool|事务|redo与undo|锁

    <MYSQL是怎样运行的>笔记 前记: 历时15天,笔记+看书.完成于2022.2.5. 本书是讲具体的数据库实现,而数据库系统概念见:https://blog.csdn.net/qq_4 ...

  8. 环境变量PS1配色方法

    这篇文章介绍如何在Bash中使用环境变量PS1进行配色. PS1 介绍 PS1 是Prompt String 1的缩写,它是Linux/Unix下的一个用于控制提示信息的环境变量,PS1是交互式的sh ...

  9. BASH脚本基础:环境变量PS1介绍

    这篇文章介绍一下Bash中的环境变量PS1. PS1 是什么 PS1 是Prompt String 1的缩写,它是Linux/Unix下的一个用于控制提示信息的环境变量,PS1是交互式的shell用于 ...

最新文章

  1. canvas 图片不能缩放显示在画布的问题 忘记设置dw,dh
  2. 一道面试题:用shell写一个从1加到100的程序
  3. s5pv210——LCD基础理论
  4. 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
  5. 历史 | FireFox 是如何从辉煌走向衰落的
  6. Android基于UDP的局域网聊天通信
  7. 关于路径的问题(以后会慢慢的补进来)
  8. iframe 与div
  9. iOS WebView生成长截图的第三种解决方案
  10. 72000oracle,oracle 使用入门到放弃errorCode 1017, state 72000 java.sql.SQLException: ORA-01017:...
  11. ACG识图搜索引擎整合及优势分析
  12. 文章详情页面评论功能添加及实现原理
  13. 太阳直射点纬度计算公式_高中地理——每日讲1题(晨昏线、正午太阳高度角、太阳的方位)...
  14. ueditor的初始化使用
  15. 微信小程序开发手册离线版本-下载
  16. XSell和Xftp的简单使用方法
  17. 苹果手机怎么连接蓝牙耳机_「科技犬」除了苹果AirPods,真无线蓝牙耳机到底怎么选?_蓝牙耳机...
  18. 从ZigBee到Matter,智能家居碎片化时代或将终结
  19. 马云说聪明的人都离开了阿里,剩下的成了富翁
  20. ProcessingJoy —— 素描风格效果【JAVA】【GLSL】

热门文章

  1. Excel如何删除合并单元格列后的空单元格
  2. 取消Wince App 应用启动动画和隐藏分区注册表项
  3. avalonia 控件TextBox 及其他控件文本改变事件
  4. [附源码]Python计算机毕业设计鞍山丘比特房屋租赁管理系统
  5. PHP实现发送邮件功能代码|PHP怎么实现QQ邮件发送|Php发送邮件代码
  6. 女性养生最需要的十种食物
  7. Linux下串口编程总结
  8. unity生成二维码
  9. sql面试题,查询出每班每科最高分的学生
  10. EventBus底层实现原理