在用戶的bashrc中添加一行export來修改提示符。

echo printf printf命令模仿C程序庫(library)里的printf()庫程序(library routine)。它幾乎復(fù)制了 該函數(shù)的所有功能。不過在Shell層級的版本上,會有些差異。由于printf的行為是由POSIX 標(biāo)準(zhǔn)所定義,因此使用printf的腳本比使用echo移植性好。 如同echo命令,printf命令可以輸出簡單的字符串: [root@master ~]#printf "Hello, Shell\n" Hello, Shell [root@master ~]# 你應(yīng)該可以馬上發(fā)現(xiàn),最大的不同在于:printf不像echo那樣會自動提供一個換行符號。你必須顯式 地將換行符號指定成\n。 echo -n "Enter your name:" //參數(shù)-n的作用是不換行,echo默認(rèn)是換行 要使轉(zhuǎn)義符生效,需加參數(shù)-e
# echo輸出顏色文本 echo命令改變樣式,以輸出不同顏色的文本,必須有 -e 選項(xiàng)(開啟echo中的轉(zhuǎn)義)。
在echo命令輸出之后附加換行,可以使用\n選項(xiàng): $ 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"\"
echo "/dev/rmt0" /dev/rmt0 echo "\"/dev/rmt0\"" "/dev/rmt0"
菜單顯示,不必多個echo一行行顯示,可以一整個echo
echo "=========================================== | ** unix script test | | 1 --- num 1 | | 2 --- num 2 | | 3 --- num 3 | | 4 --- num 4 | ==============================================="
事實(shí)上,echo 除了 -n options 之外,常用選項(xiàng)還有: -e :啟用反斜線控制字符的轉(zhuǎn)換(參考下表) -E :關(guān)閉反斜線控制字符的轉(zhuǎn)換(預(yù)設(shè)如此) -n :取消行末之換行符號(與 -e 選項(xiàng)下的 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
前面講到,包圍在單引號之內(nèi)的字符都不會有特殊含義,所以單引號本身并不能在一對單引號中出現(xiàn)。但是在前面加上$之后,就可以使用\進(jìn)行轉(zhuǎn)義了,\的轉(zhuǎn)義含義與C語言中的相同。
關(guān)于 echo 命令所支持的反斜線控制字符如下表: \a:ALERT / BELL (從系統(tǒng)喇叭送出鈴聲) \b:BACKSPACE ,也就是向左刪除鍵 \c:取消行末之換行符號 \E:ESCAPE,跳脫鍵 \f:FORMFEED,換頁字符 \n:NEWLINE,換行字符 \r:RETURN,回車鍵 \t:TAB,表格跳位鍵 \v:VERTICAL TAB,垂直表格跳位鍵 :ASCII 八進(jìn)位編碼(以 x 開首為十六進(jìn)制) :反斜線本身 $ echo -e "a\tb\tc\nd\te\tf" a b c d e f
上例運(yùn)用 \t 來區(qū)隔 abc 還有 def ,及用\n 將 def 換至下一行。
例二:
$ echo -e "\141\011\142\011\143\012\144\011\145\011\146" a b c d e f
與例一的結(jié)果一樣,只是使用 ASCII 八進(jìn)位編碼。
例三:
$ echo -e "\x61\x09\x62\x09\x63\x0a\x64\x09\x65\x09\x66" a b c d e f
與例二差不多,只是這次換用 ASCII 十六進(jìn)制編碼。 測試變量是否已經(jīng)設(shè)置 有時要測試是否已設(shè)置或初始化變量。如果未設(shè)置或初始化,就可以使用另一值。此命令格式為: $ { v a r i a b l e : - v a l u e } 意即如果設(shè)置了變量值,則使用它,如果未設(shè)置,則取新值。例如: $ 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沒有設(shè)置,所以會打印后面的grey
上面的例子并沒有將實(shí)際值傳給變量,需使用下述命令完成此功能: $ { v a r i a b l e : = v a l u e } 下面是一個更實(shí)用的例子。查詢工資清單應(yīng)用的運(yùn)行時間及清單類型。在運(yùn)行時間及類 型輸入時,敲回車鍵表明用戶并沒有設(shè)置兩個變量值,將使用缺省值( 0 3 : 0 0和We e k l y),并 傳入a t命令中以按時啟動作業(yè)。 #!/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 在輸入域敲回車鍵,輸出結(jié)果如下: 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系統(tǒng)時,ls、vim等工具的輸出都含有各種顏色,這些顏色的輸出大大地增強(qiáng)了文本的可讀性。 通常我們可以使用echo命令加-e選項(xiàng)輸出各種顏色的文本,例如:echo -e "\033[31mRed Text\033[0m",可以輸出紅色的字體“Red Text”。其中:"\033[31m"和"\033[0m"是ANSI轉(zhuǎn)義序列(ANSI escape code/sequence),它控制文本輸出的格式、顏色等,大多數(shù)的類unix終端仿真器都能夠解釋ANSI轉(zhuǎn)義序列。 1. ANSI顏色序列格式 通用的控制文本顏色的轉(zhuǎn)義序列格式如下: CSI n1 [;n2 [;…]] m 其中CSI全稱為“控制序列引導(dǎo)器”(Control Sequence Introducer/Initiator),也就是上述示例中的"\033["(其中\(zhòng)033是你鍵盤左上角Esc鍵對應(yīng)的ascii碼(八進(jìn)制));n1、n2等表示SGR參數(shù)(下面會列出一些常用的SGR參數(shù)),用于控制顏色、粗體、斜體、閃爍等文本輸出格式;m表示轉(zhuǎn)義序列結(jié)束。 注:\033是鍵盤左上角Esc鍵對應(yīng)的ASCII碼(8進(jìn)制),\033、\x1b和\e效果一樣, 例如:echo -e "\x1b[31mRed Text\e[0m"也輸出紅色字體“Red Text”。
除了shell命令可輸出顏色,其它語言中也可以使用上述ANSI轉(zhuǎn)義序列輸出顏色(前提是你使用的終端仿真器能夠解析ANSI轉(zhuǎn)義序列),以下給出幾種主要語言中輸出顏色文本的示例。 注:以下程序僅針對類unix終端有效,win32控制臺不支持ANSI轉(zhuǎn)義序列,因而無效。
http://www.cnblogs.com/crabxx/p/4046498.html
https://en./wiki/ANSI_escape_code
常用的SRG參數(shù)列表如下:
可以選擇的編碼如下所示(這些顏色是ANSI標(biāo)準(zhǔn)顏色): 編碼 顏色/動作 0 重新設(shè)置屬性到缺省設(shè)置 1 設(shè)置粗體 2 設(shè)置一半亮度(模擬彩色顯示器的顏色) 4 設(shè)置下劃線(模擬彩色顯示器的顏色) 5 設(shè)置閃爍 7 設(shè)置反向圖象 22 設(shè)置一般密度 24 關(guān)閉下劃線 25 關(guān)閉閃爍 27 關(guān)閉反向圖象 30 設(shè)置黑色前景 31 設(shè)置紅色前景 32 設(shè)置綠色前景 33 設(shè)置黃色前景 34 設(shè)置藍(lán)色前景 35 設(shè)置紫色前景 36 設(shè)置青色前景 37 設(shè)置白色(灰色)前景 38 在缺省的前景顏色上設(shè)置下劃線 39 在缺省的前景顏色上關(guān)閉下劃線 40 設(shè)置黑色背景 41 設(shè)置紅色背景 42 設(shè)置綠色背景 43 設(shè)置黃色背景 44 設(shè)置藍(lán)色背景 45 設(shè)置紫色背景 46 設(shè)置青色背景 47 設(shè)置白色(灰色)背景 49 設(shè)置缺省黑色背景 其他有趣的代碼還有: \033[2J 清除屏幕 \033[0q 關(guān)閉所有的鍵盤指示燈 \033[1q 設(shè)置"滾動鎖定"指示燈(Scroll Lock) \033[2q 設(shè)置"數(shù)值鎖定"指示燈(Num Lock) \033[3q 設(shè)置"大寫鎖定"指示燈(Caps Lock) \033[15:40H 把關(guān)閉移動到第15行,40列 \007 發(fā)蜂鳴生beep
\033與\e是一樣功能
\a ASCII 響鈴字符(也可以鍵入 \007)
\e ASCII 轉(zhuǎn)義字符(也可以鍵入 \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 藍(lán)色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天藍(lán)字 \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 藍(lán)底白字 \033[0m"
echo -e "\033[45;37m 紫底白字 \033[0m"
echo -e "\033[46;37m 天藍(lán)底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"
控制選項(xiàng)說明 :
m前面的0可以省略。
\033[0m 關(guān)閉所有屬性
\033[1m 設(shè)置高亮度
\033[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m -- 37m 設(shè)置前景色
\033[40m -- 47m 設(shè)置背景色
\033[nA 光標(biāo)上移n行
\033[nB 光標(biāo)下移n行
\033[nC 光標(biāo)右移n行
\033[nD 光標(biāo)左移n行
\033[y;xH設(shè)置光標(biāo)位置
\033[2J 清屏
\033[K 清除從光標(biāo)到行尾的內(nèi)容
\033[s 保存光標(biāo)位置
\033[u 恢復(fù)光標(biāo)位置
\033[?25l 隱藏光標(biāo)
\033[?25h 顯示光標(biāo)
順序無關(guān),只需要記憶數(shù)值所代表的含義即可,因?yàn)閿?shù)值已經(jīng)限定了是背景還是前景之類的
文本終端的顯示顏色可以使用“ANSI非常規(guī)字符序列”來生成。 例如:echo -e "\033[44;37;5m ME\033[0m COOL" 解釋:"\033[44;37;5m ME "設(shè)置背景為藍(lán)色,前景為白色,閃爍光標(biāo),輸出字符“ME”; "\033[0m COOL"重新設(shè)置屏幕到缺省設(shè)置,輸出字符 “COOL”。 "e"是命令echo的一個可選項(xiàng),它用于激活特殊字符的解析器。"\033"引導(dǎo)非常規(guī)字符序列(即"\033["表示終端轉(zhuǎn)義字符開始,"\033"即退出鍵<ESC>的ASCII碼)。"m"意味著設(shè)置屬性然后結(jié)束非常規(guī)字符序列,這個例子里真正有效的字符是"44;37;5"和"0"。修改"44;37;5"可以生成不同顏色的組合,數(shù)值和編碼的前后順序沒有關(guān)系。
echo顯示帶顏色,需要使用參數(shù)-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的位置是代表字的顏色
注:
1、字背景顏色和文字顏色之間是英文的“""”
2、文字顏色后面有個m
3、字符串前后可以沒有空格,如果有的話,輸出也是同樣有空格
一些說明: 前景顏色各數(shù)字是對應(yīng)背景顏色減去10。 結(jié)束非常規(guī)字符序列的"m"要緊跟前面的數(shù)字,不能有空格。 命令也可以寫成echo -e "^[[44;37;5m ME \033[0m COOL",其中的"^["是先按Ctrl-V,然后再按<ESC>鍵產(chǎn)生的。 輸出帶有顏色的文本,echo命令必須帶有選項(xiàng)"-e"。 這種方法只能暫時改變echo命令輸出的文本的樣式,logout后就恢復(fù)為默認(rèn)。修改.bashrc文件,可以修改默認(rèn)的顯示樣式。 如:在.bashrc文件的最后面追加一行:echo -e '\033[47;30m'。
# echo命令的其他用法 光標(biāo)跳到第60列,然后顯示一個OK。 格式:echo -en '\033[60G' && echo OK 說明:"\033["是終端轉(zhuǎn)義字符開始,60G是命令。
添加顏色相當(dāng)容易,第一步是設(shè)計(jì)不帶顏色的提示行; 添加終端(而不是 bash)可識別的專用轉(zhuǎn)義序列,以使它以彩色顯示文本的某些部分。 標(biāo)準(zhǔn) Linux 終端和 X 終端允許您設(shè)置前景(文字)顏色和背景顏色,如果需要,還可以啟用 "bold" 字符。 有八種顏色可供我們選擇。前景編號 (30-37) 和背景編號 (40-47) 顏色是通過在 PS1 中添加專用序列來選擇的──基本上是夾在 "\e["(轉(zhuǎn)義開方括號)和 "m" 之間數(shù)字值。如果指定一個以上的數(shù)字代碼,則用分號將它們分開。下面是一個顏色代碼示例:"\e[0m" 如果將數(shù)字代碼指定為零,則它就會通知終端將前景、背景和加粗設(shè)置重置為它們的默認(rèn)值。您可能會在提示行結(jié)束時使用這個代碼,以使您鍵入的文字成為非彩色的。
我已說明了如何在提示行中添加信息和顏色,但您還可以更進(jìn)一步。您可以通過在提示行中添加專用代碼來使 X 終端(如 rxvt 或 aterm)的標(biāo)題欄得到動態(tài)更新。您所要做的只是將下面的序列添加到您的 PS1 提示行中: "/e]2;titlebar/a" 只須用您希望其出現(xiàn)在 xterm 標(biāo)題欄中的文字替換子串 "titlebar" 即可,現(xiàn)在已經(jīng)一切就緒了!不必使用靜態(tài)文字;您可以將 bash 轉(zhuǎn)義序列插入標(biāo)題欄中。請查看下面這個示例,它將用戶名、主機(jī)名和當(dāng)前工作目錄顯示在標(biāo)題欄中,并定義了一個簡短、明亮的綠色提示行: export PS1="/[/e]2;/u@/H /w/a/e[32;1m/]>/[/e[0m/] " 因?yàn)樗鼘⑷啃畔@示在標(biāo)題欄上,而不是顯示在終端上,終端對一行可以顯示多少字符有限 制。順便提一句,確保用 "/[" 和 "/]" 將您的標(biāo)題欄序列括起來(因?yàn)榫徒K端而言,這個序列是非打印序列)。將大量信息放在標(biāo)題欄中的問題是,如果您使用非圖形終端(如系統(tǒng)控制臺),則看不到這 些信息。為了解決這個問題,可以在您的 .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 條件語句將根據(jù)當(dāng)前的終端設(shè)置動態(tài)設(shè)置提示行。為了獲得一致性,您一定希望配置您的 ~/.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 #將此函數(shù)放入當(dāng)前shell環(huán)境中,然后才能執(zhí)行 cfont -cyan cfont -reset
|