您的位置:首页 > 运维架构 > Shell

linux shell 打印信息

2015-08-07 15:19 441 查看
本文介绍两种 Linux Shell 在终端打印信息的方式:

1, echo :
echo 共有 3 种输出方式:
1.1 直接在 echo 后面跟要输出的信息:

echo "----------- echo without quotes ------------------------------"

echo Hello world ! ; Nice to meet 

echo Home is : $HOME !



note:
1)shell 是一种解析语言,即不需要编译而直接按行读取并解析执行的程序语言。
2)shell 以分号 “ ;” 为指令执行的终止分隔符,因此在执行代码的第二行我们看到了 “;”后面的信息 “Nice to meet you" 被解析成下一条要执行的指令,

并且报错 “Nice :command not found”

3)shell 里面引用变量时使用 "$" 符号,由于 HOME 是系统环境变量,因此 $HOME 被解析输出成它的值。

4)echo 默认每次从新的一行输出信息。

1.2 echo 后面使用双引号输出信息:

echo "----------- echo within double-quotes ------------------------"

echo "Hello world! ; Nice to meet you!"

echo "HOME is : $HOME !"



note:
1) echo 理论上使用双引号 输出信息是不允许信息里面带有感叹号 “!” 的,但不知道为什么这个限制仅局限于手动在shell中执行指令,如下图所示:



而如果把这条带感叹号的指令放在一个 shell 脚本里面去执行却没有这个限制,这个问题我在学习 shell 编程的时候也没有搞明白,
就算是留点遗憾吧,无所谓,o(∩_∩)o 哈哈,也许这叫缺陷美吧。

1.3 echo 后面使用单引号输出信息:

echo "----------- echo within single-quotes ------------------------"

echo 'Hello world! ; Nice to meet you!'

echo 'HOME is : $HOME !'



note :
1) echo 使用单引号输出信息时,变量是不会被展开的,即把变量符号直接当成字符串输出,而不是把变量符号展开表示成它的值输出。

2) echo 使用单引号输出信息时,可以带感叹号,手动、脚本执行均无此限制,如图所示:



总结:

1)echo 直接输出信息可以带变量输出,但不能输出带分号的信息。
2)echo 双引号输出信息可以带变量输出,但不能输出带感叹号“!”的信息,此限制仅限于手动在终端执行 echo ,在脚本文件中无此限制。
3)echo 单引号输出信息不可以带变量输出,手动、脚本执行,均能输出带感叹号的信息。

1.4 echo 输出转义字符:

echo "----------- escape sequences for echo -------------"

echo -n "Hello world!"

echo "Nice to meet you echo!"

echo "1\t2\t3"

echo -e "1\t2\t3"

echo -e -n "1\t2\t3"

echo "Bye echo 123!"



note:
1) echo 使用 “-n” 参数,忽略默认的行末换行转义字符,由上面的
“Nice to meet you echo!” 紧跟在 “Hello world!”后面输出可见;
2) echo 使用 “-e” 参数,输出 "\t" 转义字符,"\t" 是制表符 tab,只有当使用 "-e" 参数时才输出成制表符 tab .

1.5 echo 带颜色输出信息:

echo "----------- shell out color in echo --------------------------"

echo -e -n "\e[1;31m This is the red text \t1\t2\t3 !\e[0m
"

echo "end"

echo -e -n "\e[42;31m This is the red text and green background!\e[0m
"

echo "end"

export GreenBackgroundText="green background"

echo -e -n "\e[45;31m This is the red text and magenta back
ground with variable $GreenBackgroundText! \e[0m "

echo "end"

echo -e -n "\e[1;41m This is only the red background! \e[0m
"

echo "end"



note:
1) echo 使用 "-e" 参数,让转义字符表示成颜色,使信息带颜色输出。
2) "\e[1;31m" 是颜色输出启用转义字符,1表示启用颜色;

3)"\e[0m" 是颜色输出复位转义字符,0表示复位颜色;

4)不同的数值表示不一样的字体颜色, 
    复位=0, 黑=30, 红=31,绿=32,黄=33,蓝=34,紫=35,青=36,白=37.
5)不一样的数值表示不一样的字体背景颜色,
    复位=0, 黑=40, 红=41,绿=42,黄=43,蓝=44,紫=45,青=46,白=47.

2,printf :

printf 使用与C语言相同的带变量输出方式:
2.1 printf 左对齐输出:

echo "----------- printf left alignment ----------------------------"

printf "Hello world!\n"

printf "%-5s %-10s %-4s\n" NO NAME MARK

printf "%-5s %-10s %-4.2f\n" 1 david 100

printf "%-5s %-10s %-4.2f\n" 2 garfield 99.4

printf "%-5s %-10s %-4.2f\n" 3 garfield00123 98.789



note:

1)printf 使用 双引号 + 参数 的格式化输出方式打印信息,使用与 C 语言 printf 相同的带参数方式;

2)printf 默认不带换行输出,如果需要在输出后换行,需要自行在双引号的信息的最后添加 "\n" ,跟C语言的 printf 相同;

3)"%-5s" " %-10s" "%-4.2f" 是带参数的格式化输出方式,与C语言里面的 printf 相似;

   "%" :是参数替换符;

    "-"  :表示左对齐方式输出信息;

    "s" :表示对参数使用字符串输出;

    "f" :表示对参数使用浮点型输出;

    "5" "10" : 对参数进行格式化输出,不够长度的使用空格补够,但如果长度超长,信息则会完整输出,即不会丟信息,如上图红框所示;

    "4.2" :则表示对浮点参数使用保留两位小数的截取方式输出;

2.2 printf 右对齐输出:

echo "----------- printf right alignment - default -----------------"

printf "Hello world!\n"

printf "%5s %10s %10s\n" NO NAME MARK

printf "%5s %10s %10.2f\n" 1 david 100

printf "%5s %10s %10.2f\n" 2 garfield 99.4

printf "%5s %10s %10.2f\n" 3 garfield00123 98.789



note :
1) printf 默认情况不带“-”是右对齐输出的;
2) 由上图红框所示,无论左对齐、右对齐,对参数进行格式化输出,不够长度的使用空格补够,但如果长度超长,信息则会完整输出,即不会丟信息;

2.3 printf  带颜色输出信息:

echo "---------- shell out color in printf -------------------------"

printf "\e[42;31mPrintf red text and green background!\e[0m\n";



note:
1) printf 使用与echo 相同的颜色转义字符与配色值,但 printf 不需要像 echo 哪样带有 "-e" 这样的使能参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: