看到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...