在shell或者perl中改變字型或背景的顏色_linux shell

來源:互聯網
上載者:User

在shell下提到終端的顏色的時候不得不提到幾個提示符變數:

PS1:預設提示符,也就是遠程登上系統之後,開啟終端,我們天天見到的那個熟悉的提示符;

[root@vps ~]$echo $PS1
[\u@\h \W]$

PS2:就是我們命令一行寫不完在我們命令列下我們打上”\”,另起一行所顯示的那個;

[root@vps ~]$echo “hello” \
> “world”
hello world
[root@vps ~]$echo $PS1
[\u@\h \W]$

PS3:就是我們在shell指令碼中要用select的時候顯示的那個;

複製代碼 代碼如下:

#!/bin/bash
#PS3=”Select a script language (1-4): ”
select i in perl php python shell exit
do
case $i in
perl) echo “I like perl”;;
php) echo “php is good”;;
python) echo “xiangjun like python”;;
shell) echo “shell is my favourite”;;
exit) exit;;
esac
done

[root@vps tmp]$bash select.sh
1) perl
2) php
3) python
4) shell
5) exit
#? 1
I like perl
#?

預設是”#?”,呵呵,我們在指令碼中改變一下

複製代碼 代碼如下:

#!/bin/bash
PS3=”Select a script language (1-4): “
select i in perl php python shell exit
do
case $i in
perl) echo “I like perl”;;
php) echo “php is good”;;
python) echo “xiangjun like python”;;
shell) echo “shell is my favourite”;;
exit) exit;;
esac
done

[root@vps tmp]$bash select.sh
1) perl
2) php
3) python
4) shell
5) exit
Select a script language (1-4): 3
xiangjun like python
Select a script language (1-4):

變了吧,哈哈。

PS4:我們調試shell指令碼我們會bash -x myscripts.sh (或者在指令碼中set -x)那個提示符;

複製代碼 代碼如下:

Select a script language (1-4): 5
[root@vps tmp]$bash -x select.sh
+ PS3='Select a script language (1-4): ‘
+ select i in perl php python shell exit

就是那個”+”了,我們重設下;

複製代碼 代碼如下:

[root@vps tmp]$export PS4=”>>”
[root@vps tmp]$bash -x select.sh
>>PS3='Select a script language (1-4): ‘
>>select i in perl php python shell exit

好了,回憶了一些基礎知識之後,回到我們的話題上來:,我們以PS1為例說明一下:
那這個變數是在哪裡設定的呢?在我們目前的redhat(當然包括centos了)是在/etc/bashrc檔案中的:

[ "$PS1" = "\\s-\\v\\\$ " ] && PS1=”[\u@\h \W]\\$ ”

那這些\w \u 分別代表什麼意思呢?分別如下:

\d :代表日期,格式為weekday month date,例如:”Mon Aug 1″
\H :完整的主機名稱。例如:我的機器名稱為:fc4.linux,則這個名稱就是fc4.linux
\h :僅取主機的第一個名字,如上例,則為fc4,.linux則被省略
\t :時間顯示為24小時格式,如:HH:MM:SS
\T :時間顯示為12小時格式
\A :時間顯示為24小時格式:HH:MM
\u :目前使用者的帳號名稱
\v :BASH的版本資訊
\w :完整的工作目錄名稱。家目錄會以 ~代替
\W :利用basename取得工作目錄名稱,所以只會列出最後一個目錄
\# :下達的第幾個命令
\$ :提示字元,如果是root時,提示符為:# ,普通使用者則為:$
我們可以自由的發揮我們的預設提示符該是什麼樣子了,下面不要偏離我們的主題,我們的主題是顏色;




那麼它的文法是什麼呢?

\e[ ——表示顏色的提示的起始位置
x;ym ——表示顏色的代碼。顏色的代碼在下面有說明(當然可以連著寫多個,之間用";"分開,比如 1;5;35m)
\e[m ——表示代顏色的提示的結束位置

x的取值為:

0 OFF
1 高亮顯示
4 underline
5 閃爍
7 反白顯示
8 不可見

y的取值:

前景 背景 顏色
---------------------------------------
30 40 黑色
31 41 紅色
32 42 綠色
33 43 黃色
34 44 藍色
35 45 紫紅色
36 46 青藍色
37 47 白色

文法說明的都告訴你了,接下來就是你自由發揮了;

在指令碼中如何使用,先來個例子再說;



好了,不過如果不想影響我們後面的顏色的話,我們最好在關閉的時候這麼寫:\e[0m



又閃爍又改變顏色的來一個:

echo -e '\e[35;5;1mFor Example:\e[0m'

35是顏色,5代表閃爍,1代表前景色彩,當中用“;”分開,順序倒是無所謂啦;\e 可以寫成 \033;

那麼在perl中呢?這個我們是藉助Term::ANSIColor這個模組的:

複製代碼 代碼如下:

#!/usr/bin/perl
use strict;
use Term::ANSIColor;
print color 'bold red';
print "Hello word\n";
print color 'reset';




這樣寫的話挺麻煩的,寫個函數算了:

複製代碼 代碼如下:

#!/usr/bin/perl
use strict;
use Term::ANSIColor;
sub ColorMessage{
my($colors,$messages) = @_;
print color "bold $colors";
print "$messages \n";
print color 'reset';
}

ColorMessage('green','Hello word ');


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.