2016-03-03 38 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个字符的字段中。你可以用这个强制变长的字符串在屏幕上占用相同数量的空间。