2016-03-03 100 views
0

我的代碼片段目前看起來像這樣...bash shell的回聲/ printf的如何格式化輸出正確的方式

#Location of network config files 
nfds="/etc/sysconfig/network-scripts/" 

#Standard prefer of network config files 
fil="ifcfg-" 

#Array variable that feeds "$nic" 
cards= array loop built from "nic=$(ls /sys/class/net | grep en)" 

#Set color for Divice labile 
div="\033[38;5;39m" 

#Set Fix format and colour info 
fix="\033[38;5;118m" 

#Set color for OK 
ok="\033[38;5;28m" 

#Clear All font and color info 
ctf="\033[0m" 

function currentCardDefRoute(){ 

    defr=$(grep DEFROUTE $nfds$fil$cards | cut -d = -f 2) 

    if [[ $defr = "yes" ]] || [[ $defr = "no" ]]; then 
     echo -e " "$div$cards$ctf"'s current default route is\t"$div$defr$ctf"\t\t\t\t ["$ok"OK"$ctf"]" 
     $st 
    else 
     echo -e " "$div$cards$ctf"'s current default route is \t"$fix"Missing"$ctf"\t\t\t ["$fix"PLEASE FIX"$ctf"]" 
     $st 
    fi 

} 

我所有的呼應可讀性和一致的格式線縮進1個格。保持輸出可讀性和易於理解。

我期待我們的「列」選項,使輸出更具動態性,並且無論屏幕大小或變化結果如何,格式都一致。我也很想擺脫我的代碼中的所有「\ t」。我試過printf沒有成功。

我GOOGLE了很多不同的方式,沒有看到具體的答案林尋找或變化我可以從中得出答案。

謝謝你的幫助。 btw。這是我所寫的第一個代碼,所以很容易的傢伙:)

+0

請編輯你的Q與實際的數據/尺寸/等,使範圍「使輸出更加動態和格式一致,無論屏幕尺寸或變量結果」。例如,如果你有一個80英寸的屏幕,但120寬的數據,你想要發生什麼? **但基本上''printf'應該是你花時間在研究上的地方。一旦你理解了20-30%的人類印記(通過做小樣本),其餘的將是顯而易見的。一些'printf'手冊頁甚至有一個標有'examples'的部分。祝你好運。 – shellter

+0

正如你有一個'c'標籤,我會提到'c'語言中的'printf'是shell'printf'函數的「父」。我不確定你是否認爲你需要用'c'來編寫'printf',但是你不需要。 (這個看起來不錯,但功能可能會有所不同,具體取決於外殼和操作系統版本:http://ss64.com/bash/printf.html)。祝你好運。 – shellter

+0

這既不與C相關,也不與由標籤定義的'printf'有關(與C函數C相關)。 – Olaf

回答

0

你可能想嘗試使用column實用程序。它的唯一目的是將輸出格式化爲列。這可能比試圖用echoprintf做同樣的事情更容易。

如果您必須使用printf,您需要使用格式說明符"%25.25s"。第一個數字是「最小字段寬度」,(在這種情況下)導致輸出至少有25個字符寬。如果輸出較短,則用空格填充。第二個數字表示要打印的最大字符數。當這兩個數字相同時,它有效地表示將字符串打印在正好爲25個字符的字段中。你可以用這個強制變長的字符串在屏幕上佔用相同數量的空間。