printf,nl,echo这三个命令都是按一定格式输出自己想要的内容的命令,这三个命令的使用和掌握可以使我们的运维工作更上一层楼。从使用频率上来说,并不是经常使用的命令。
一,printf
此命令是格式化输出命令,格式化指的是按照自己定义的规则格式输出相应内容。可以看做是echo命令的超级加强版。
printf命令的帮助是 man printf,并不能使用printf --help,这一点需要注意。
%s 字符串
%f 浮点格式 (float double)
%cASCII字符,显示相对应的第一个字符
%d%i 十进制数
%o 十进制转换到不带正负的八进制
%u十进制转换到十进制
%x 十进制转换到十六进制
%%本身
\f换页
\n换行
\r回车
\t制表符
\v垂直制表符
\\本身
例如:将wo ai tian an men 按行打印输出到屏幕,分别以一个单词和两个单词为单位打印输出。
总的来说,这个命令的格式是:printf "要定义的格式 最终输出的方式" 要格式化的内容,并且是支持awk命令的哦
二,echo
前面也大概提到了 ,是printf的简化版本,主要是echo可以更快速的自定义输出颜色,例如下面这个脚本(检测主机是否在线的脚本):
#!/bin/bash
IP_LIST="192.168.0.17 192.168.0.18 192.168.0.19" # 将ip放进数组中
for ip in $IP_LIST; do #for循环遍历数组
num=1 #定义初始值
while [ $num -le 3 ]
do
if ping -c 1 $ip >/dev/null
then
echo -e "\033[32;1m$ip Ping is success\033[0m" #if 判断如果ping通 则返回success
break
else
FALL[$num]=$ip # 反之 则失败次数+1
let num++
fi
done
if [ -eq 3 ] # if判断如果失败次数等于3 则返回Ping is failure
then
echo -e "\033[31;1m Ping is failure!\033[0m"
unset FALL[*]
fi
done
主要使用的参数是 -e,表示echo可以处理特殊字符而不转义,除此之外,别的参数没有太多的实际用处。
三,nl
nl命令等于cat -n 命令
命令参数:
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示;
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
-n rz :行号在自己栏位的最右方显示,且加 0 ;
-w :行号栏位的占用的位数。
-p 在逻辑定界符处不重新开始计算。
例如:nl -b a -n rz text.txt