Linux Shell程式設計之標準彩色對齊列印

2021-08-31 19:55:27 字數 1860 閱讀 3401

看到linux系統中好多軟體包括系統本身啟動的時候列印整整齊齊的[ ok ], [ failed ],感覺非常舒服。

但是自己寫了很多shell程式,提示語句都是簡單的echo或printf,最多可以列印個彩色的狀態提示。

近來總是寫公升級包、安裝包的指令碼,shell程式設計也感覺越來越順手,所以想解決這個問題。

我解決這個問題用了很簡單的方法,可能有高人有更加簡潔的**可以實現,但是我寫這個**容易讀懂,思想也簡單,希望能幫助搜尋到這篇部落格的童鞋。

基本思想:

用函式echo實現白色文字加狀態提示。

用函式colorecho實現彩色文字加狀態提示。

狀態提示顏色固定。

每行都按66個

字元進行對齊。也就是說最後的狀態是對齊的,前面寫文字,之間是空格。

實現方法為:每次記錄當前列印的字元數,如果遇到ok或failed(大小寫區分),就認為當前列印字元數為0,並列印狀態資訊。

**如下(可複製使用):

使用時刻儲存為單獨檔案,在別的shell指令碼中呼叫即可,比如存為color_echo.sh以後,同目錄下的shell指令碼可以這樣呼叫:

. color_echo.sh;

就是乙個點,乙個空格,加上檔案路徑,打個冒號(冒號可選,shell語法,有冒號的話,同一行還可以寫**,這個***)。

# 前景色:30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍色)、35(洋紅)、36(青色)、37(白色)。

# 背景色:十位換成4

okstatus="[ \033[0;32;40mok\033[0m ]\n"

failstatus="[ \033[0;31;40mfailed\033[0m ]\n"

last_len=0

function echo()

endlen=$content_len

((startlen=endlen-2))

if [[ $ = "\n" ]]; then

content_len=0

fifi if [ $last_len -ne 0 -a $content_len -eq 0 ]; then

((blank_len=66-last_len))

printf "%$s" " "

fi echo -en "$content"

((last_len=last_len+content_len))

if [ $content_len -eq 0 ]; then

((last_len=0))

fi}function colorecho()

endlen=$content_len

((startlen=endlen-2))

if [[ $ = "\n" ]]; then

content_len=0

fifi if [ $last_len -ne 0 -a $content_len -eq 0 ]; then

((blank_len=66-last_len))

printf "%$s" " "

fi if [ $color -gt 0 ]; then

content="\033[0;$;40m$\033[0m"

fi echo -en "$content"

((last_len=last_len+content_len))

if [ $content_len -eq 0 ]; then

((last_len=0))

fi}if [ 0 -gt 1 ]; then

echo "start to do ... "

echo "ok"

echo "stop *** ..."

echo "failed"

fi

linux shell程式設計之 if語句

一 語句格式 一行中的寫法 if test commands then consequent commands fi 多行的寫法 if 條件 then command else command fi 基本語法記住亮點 1 按照漢語的方式記憶 如果 if 那麼 then 就 否則 else 就 2 記...

Linux shell程式設計之awk sed用法詳解

awk的用法 1.awk的使用 呼叫方式 1.命令列方式 2.將所有awk命令插入乙個檔案,並使awk程式可執行,然後使awk命令直譯器作為指令碼的首行,以便通過鍵入指令碼名稱來呼叫它。3.將所有的awk命令插入乙個單獨檔案,然後呼叫。選項說明 f 域符號 預設為空格 f 指明awk指令碼 2.模式...

LINUX SHELL程式設計之遠端拷貝

使用expect,進行遠端拷貝 1.首先確認你的系統安裝有expect which expect 如果顯示如下,說明已經安裝完expect,如果沒有執行2 usr bin expect 2.yum install expect 3.遠端拷貝 usr bin expect f set password...