在用户的bashrc中添加一行export来修改提示符。html
echo printf
printf命令模仿C程序库(library)里的printf()库程序(library routine)。它几乎复制了
该函数的全部功能。不过在Shell层级的版本上,会有些差别。因为printf的行为是由POSIX
标准所定义,所以使用printf的脚本比使用echo移植性好。
如同echo命令,printf命令能够输出简单的字符串:
[root@master ~]#printf "Hello, Shell\n"
Hello, Shell
[root@master ~]#
你应该能够立刻发现,最大的不一样在于:printf不像echo那样会自动提供一个换行符号。你必须显式
地将换行符号指定成\n。
echo -n "Enter your name:" //参数-n的做用是不换行,echo默认是换行
要使转义符生效,需加参数-elinux
# echo输出颜色文本
echo命令改变样式,以输出不一样颜色的文本,必须有 -e 选项(开启echo中的转义)。shell
在echo命令输出以后附加换行,可使用\n选项:
$ cat >echo
#!/bin/bash
echo -e "this echo's 2 new lines\n\n"
echo "OK"
echo "The log files have all been done"
echo "$LOGNAME carried them out at `date`"
echo "\"/dev/rmt0"\"vim
echo "/dev/rmt0"
/dev/rmt0
echo "\"/dev/rmt0\""
"/dev/rmt0"bash
菜单显示,没必要多个echo一行行显示,能够一整个echo函数
echo "===========================================
| ** unix script test |
| 1 --- num 1 |
| 2 --- num 2 |
| 3 --- num 3 |
| 4 --- num 4 |
==============================================="工具
事实上,echo 除了 -n options 以外,经常使用选项还有:
-e :启用反斜线控制字符的转换(参考下表)
-E :关闭反斜线控制字符的转换(预设如此)
-n :取消行末之换行符号(与 -e 选项下的 c 字符赞成)测试
3.1.2.4 ANSI-C Quoting
Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:
\a
alert (bell)
\b
backspace 字体
前面讲到,包围在单引号以内的字符都不会有特殊含义,因此单引号自己并不能在一对单引号中出现。可是在前面加上$以后,就可使用\进行转义了,\的转义含义与C语言中的相同。this
关于 echo 命令所支持的反斜线控制字符以下表:
\a:ALERT / BELL (从系统喇叭送出铃声)
\b:BACKSPACE ,也就是向左删除键
\c:取消行末之换行符号
\E:ESCAPE,跳脱键
\f:FORMFEED,换页字符
\n:NEWLINE,换行字符
\r:RETURN,回车键
\t:TAB,表格跳位键
\v:VERTICAL TAB,垂直表格跳位键
:ASCII 八进位编码(以 x 开首为十六进制) :反斜线自己
$ echo -e "a\tb\tc\nd\te\tf"
a b c
d e f
上例运用 \t 来区隔 abc 还有 def ,及用\n 将 def 换至下一行。
例二:
$ echo -e "\141\011\142\011\143\012\144\011\145\011\146"
a b c
d e f
与例一的结果同样,只是使用 ASCII 八进位编码。
例三:
$ echo -e "\x61\x09\x62\x09\x63\x0a\x64\x09\x65\x09\x66"
a b c
d e f
与例二差很少,只是此次换用 ASCII 十六进制编码。
测试变量是否已经设置
有时要测试是否已设置或初始化变量。若是未设置或初始化,就可使用另外一值。此命令格式为:
$ { v a r i a b l e : - v a l u e }
意即若是设置了变量值,则使用它,若是未设置,则取新值。例如:
$ COLOUR=blue
$ echo "The sky is ${COLOR:-grey} today"
The sky is grey today
变量c o l o u r取值b l u e,e c h o打印变量c o l o u r时,首先查看其是否已赋值,若是查到,则使
用该值。变量$COLOR没有设置,因此会打印后面的grey
上面的例子并无将实际值传给变量,需使用下述命令完成此功能:
$ { v a r i a b l e : = v a l u e }
下面是一个更实用的例子。查询工资清单应用的运行时间及清单类型。在运行时间及类
型输入时,敲回车键代表用户并无设置两个变量值,将使用缺省值( 0 3 : 0 0和We e k l y),并
传入a t命令中以按时启动做业。
#!/bin/bash
# vartest
echo "what time do you wish start the payroll [03:00]:"
read TIME
echo " process to start at ${TIME:=03:00} OK"
echo "Is it a monthly or weekly run [Weekly]:"
read RUN_TYPE
echo "Run type is ${RUN_TYPE:=Weekly}'
at -f $RUN_TYPE $TIME
在输入域敲回车键,输出结果以下:
what time do you wish start the payroll [03:00]:
process to start at 03:00 OK
Is it a monthly or weekly run [Weekly]:
Run type is Weekly
在使用putty、secureCRT、XShell等终端仿真器链接linux系统时,ls、vim等工具的输出都含有各类颜色,这些颜色的输出大大地加强了文本的可读性。
一般咱们可使用echo命令加-e选项输出各类颜色的文本,例如:echo -e "\033[31mRed Text\033[0m",能够输出红色的字体“Red Text”。其中:"\033[31m"和"\033[0m"是ANSI转义序列(ANSI escape code/sequence),它控制文本输出的格式、颜色等,大多数的类unix终端仿真器都可以解释ANSI转义序列。
1. ANSI颜色序列格式
通用的控制文本颜色的转义序列格式以下:
CSI n1 [;n2 [;…]] m
其中CSI全称为“控制序列引导器”(Control Sequence Introducer/Initiator),也就是上述示例中的"\033["(其中\033是你键盘左上角Esc键对应的ascii码(八进制));n一、n2等表示SGR参数(下面会列出一些经常使用的SGR参数),用于控制颜色、粗体、斜体、闪烁等文本输出格式;m表示转义序列结束。
注:\033是键盘左上角Esc键对应的ASCII码(8进制),\03三、\x1b和\e效果同样, 例如:echo -e "\x1b[31mRed Text\e[0m"也输出红色字体“Red Text”。
除了shell命令可输出颜色,其它语言中也可使用上述ANSI转义序列输出颜色(前提是你使用的终端仿真器可以解析ANSI转义序列),如下给出几种主要语言中输出颜色文本的示例。
注:如下程序仅针对类unix终端有效,win32控制台不支持ANSI转义序列,于是无效。
http://www.cnblogs.com/crabxx/p/4046498.html
https://en.wikipedia.org/wiki/ANSI_escape_code
经常使用的SRG参数列表以下:
能够选择的编码以下所示(这些颜色是ANSI标准颜色):
编码 颜色/动做
0 从新设置属性到缺省设置
1 设置粗体
2 设置一半亮度(模拟彩色显示器的颜色)
4 设置下划线(模拟彩色显示器的颜色)
5 设置闪烁
7 设置反向图象
22 设置通常密度
24 关闭下划线
25 关闭闪烁
27 关闭反向图象
30 设置黑色前景
31 设置红色前景
32 设置绿色前景
33 设置黄色前景
34 设置蓝色前景
35 设置紫色前景
36 设置青色前景
37 设置白色(灰色)前景
38 在缺省的前景颜色上设置下划线
39 在缺省的前景颜色上关闭下划线
40 设置黑色背景
41 设置红色背景
42 设置绿色背景
43 设置黄色背景
44 设置蓝色背景
45 设置紫色背景
46 设置青色背景
47 设置白色(灰色)背景
49 设置缺省黑色背景
其余有趣的代码还有:
\033[2J 清除屏幕
\033[0q 关闭全部的键盘指示灯
\033[1q 设置"滚动锁定"指示灯(Scroll Lock)
\033[2q 设置"数值锁定"指示灯(Num Lock)
\033[3q 设置"大写锁定"指示灯(Caps Lock)
\033[15:40H 把关闭移动到第15行,40列
\007 发蜂鸣生beep
\033与\e是同样功能
\a ASCII 响铃字符(也能够键入 \007)
\e ASCII 转义字符(也能够键入 \033)
下面看几个例子:
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"
echo -e "\033[42;37m 绿底白字 \033[0m"
echo -e "\033[43;37m 黄底白字 \033[0m"
echo -e "\033[44;37m 蓝底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
控制选项说明 :
m前面的0能够省略。
\033[0m 关闭全部属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- 37m 设置前景色
\033[40m -- 47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
顺序无关,只须要记忆数值所表明的含义便可,由于数值已经限定了是背景仍是前景之类的
文本终端的显示颜色可使用“ANSI很是规字符序列”来生成。
例如:echo -e "\033[44;37;5m ME\033[0m COOL"
解释:"\033[44;37;5m ME "设置背景为蓝色,前景为白色,闪烁光标,输出字符“ME”;
"\033[0m COOL"从新设置屏幕到缺省设置,输出字符 “COOL”。
"e"是命令echo的一个可选项,它用于激活特殊字符的解析器。"\033"引导很是规字符序列(即"\033["表示终端转义字符开始,"\033"即退出键<ESC>的ASCII码)。"m"意味着设置属性而后结束很是规字符序列,这个例子里真正有效的字符是"44;37;5"和"0"。修改"44;37;5"能够生成不一样颜色的组合,数值和编码的先后顺序没有关系。
echo显示带颜色,须要使用参数-e
格式以下:
echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
例如:
echo -e "\033[41;37m TonyZhang \033[0m"
echo -e "\e[41;37m TonyZhang \e[0m"
其中41的位置表明底色, 37的位置是表明字的颜色
注:
一、字背景颜色和文字颜色之间是英文的“""”
二、文字颜色后面有个m
三、字符串先后能够没有空格,若是有的话,输出也是一样有空格
一些说明:
前景颜色各数字是对应背景颜色减去10。
结束很是规字符序列的"m"要紧跟前面的数字,不能有空格。
命令也能够写成echo -e "^[[44;37;5m ME \033[0m COOL",其中的"^["是先按Ctrl-V,而后再按<ESC>键产生的。
输出带有颜色的文本,echo命令必须带有选项"-e"。
这种方法只能暂时改变echo命令输出的文本的样式,logout后就恢复为默认。修改.bashrc文件,能够修改默认的显示样式。
如:在.bashrc文件的最后面追加一行:echo -e '\033[47;30m'。
# echo命令的其余用法
光标跳到第60列,而后显示一个OK。
格式:echo -en '\033[60G' && echo OK
说明:"\033["是终端转义字符开始,60G是命令。
添加颜色至关容易,第一步是设计不带颜色的提示行;
添加终端(而不是 bash)可识别的专用转义序列,以使它以彩色显示文本的某些部分。
标准 Linux 终端和 X 终端容许您设置前景(文字)颜色和背景颜色,若是须要,还能够启用 "bold" 字符。
有八种颜色可供咱们选择。前景编号 (30-37) 和背景编号 (40-47)
颜色是经过在 PS1 中添加专用序列来选择的──基本上是夹在 "\e["(转义开方括号)和 "m" 之间数字值。若是指定一个以上的数字代码,则用分号将它们分开。下面是一个颜色代码示例:"\e[0m"
若是将数字代码指定为零,则它就会通知终端将前景、背景和加粗设置重置为它们的默认值。您可能会在提示行结束时使用这个代码,以使您键入的文字成为非彩色的。
我已说明了如何在提示行中添加信息和颜色,但您还能够更进一步。您能够经过在提示行中添加专用代码来使 X 终端(如 rxvt 或 aterm)的标题栏获得动态更新。您所要作的只是将下面的序列添加到您的 PS1 提示行中:
"/e]2;titlebar/a"
只须用您但愿其出如今 xterm 标题栏中的文字替换子串 "titlebar" 便可,如今已经一切就绪了!没必要使用静态文字;您能够将 bash 转义序列插入标题栏中。请查看下面这个示例,它将用户名、主机名和当前工做目录显示在标题栏中,并定义了一个简短、明亮的绿色提示行:
export PS1="/[/e]2;/u@/H /w/a/e[32;1m/]>/[/e[0m/] "
由于它将所有信息显示在标题栏上,而不是显示在终端上,终端对一行能够显示多少字符有限 制。顺便提一句,确保用 "/[" 和 "/]" 将您的标题栏序列括起来(由于就终端而言,这个序列是非打印序列)。将大量信息放在标题栏中的问题是,若是您使用非图形终端(如系统控制台),则看不到这 些信息。为了解决这个问题,能够在您的 .bashrc 中添加如下几行:
if [ "$TERM" = "linux" ]
then
#we're on the system console or maybe telnetting in
export PS1="/[/e[32;1m/]/u@/H > /[/e[0m/]"
else
#we're not on the console, assume an xterm
export PS1="/[/e]2;/u@/H /w/a/e[32;1m/]>/[/e[0m/] "
fi
这个 bash 条件语句将根据当前的终端设置动态设置提示行。为了得到一致性,您必定但愿配置您的 ~/.bash_profile,以便它在启动时搜索 (source) 您的 ~/.bashrc。确保您的 ~/.bash_profile 文件中有如下这样一行:
source ~/.bashrc
颜色码表
#!/bin/bash
T='samples'
echo
echo " default 40m 41m 42m 43m 44m 45m 46m 47m"
## FG 为前景(foreground)色, BG 为背景(background)色
for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' ' 36m' '1;36m' ' 37m' '1;37m'
do
FG=$(echo $FGs|tr -d ' ')
echo -en " $FGs \033[$FG $T "
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
do
echo -en " \033[$FG\033[$BG $T \033[0m"
done
echo
done
echo
vi cfont
cfont() { while (($#!=0)) do case $1 in -b) echo -ne " "; ;; -t) echo -ne "\t"; ;; -n)
echo -ne "\n"; ;; -black) echo -ne "\033[30m"; ;; -red) echo -ne "\033[31m"; ;; -green) echo -ne "\033[32m"; ;; -yellow) echo -ne "\033[33m"; ;; -blue) echo -ne "\033[34m"; ;; -purple) echo -ne "\033[35m"; ;; -cyan) echo -ne "\033[36m"; ;; -white|-gray) echo -ne "\033[37m"; ;; -reset) echo -ne "\033[0m"; ;; -h|-help|--help) echo "Usage: cfont -color1 message1 -color2 message2 ..."; echo "eg: cfont -red [ -blue message1 message2 -red ]"; ;; *) echo -ne "$1" ;; esac shift done }source cfont #将此函数放入当前shell环境中,而后才能执行cfont -cyan cfont -reset