转载于http://blog.chinaunix.net/uid-20671208-id-3526870.html

本文介绍两种 Linux Shell 在终端打印信息的方式:



1, echo :


echo 共有 3 种输出方式:

1.1 直接在 echo 后面跟要输出的信息:


  1. echo "----------- echo without quotes ------------------------------"
  2. ! ; Nice to meet 
  3. : $HOME !


android runtime shell命令打印 shell 打印文件_双引号



note:


1)shell 是一种解析语言,即不需要编译而直接按行读取并解析执行的程序语言。


2)shell 以分号 “ ;” 为指令执行的终止分隔符,因此在执行代码的第二行我们看到了 “;”后面的信息 “Nice to meet you" 被解析成下一条要执行的指令,


并且报错 “Nice :command not found”3)shell 里面引用变量时使用 "$" 符号,由于 HOME 是系统环境变量,因此 $HOME 被解析输出成它的值。
4)echo 默认每次从新的一行输出信息。

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


1. echo "----------- echo within double-quotes ------------------------"
2. "Hello world! ; Nice to meet you!"
3. "HOME is : $HOME !"


android runtime shell命令打印 shell 打印文件_感叹号_02


note:


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


android runtime shell命令打印 shell 打印文件_转义字符_03


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

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


1. echo "----------- echo within single-quotes ------------------------"
2. 'Hello world! ; Nice to meet you!'
3. 'HOME is : $HOME !'


android runtime shell命令打印 shell 打印文件_转义字符_04


note :


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


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


总结:

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

1.4 echo 输出转义字符:


1. echo "----------- escape sequences for echo -------------"
2. -n "Hello world!"
3. "Nice to meet you echo!"
4. "1\t2\t3"
5. -e "1\t2\t3"
6. -e -n "1\t2\t3"
7. "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 带颜色输出信息:

1. echo "----------- shell out color in echo --------------------------"
2. -e -n "\e[1;31m This is the red text \t1\t2\t3 !\e[0m "
3. "end"
4. -e -n "\e[42;31m This is the red text and green background!\e[0m "
5. "end"
6. ="green background"
7. -e -n "\e[45;31m This is the red text and magenta back ground with variable $GreenBackgroundText! \e[0m "
8. "end"
9. -e -n "\e[1;41m This is only the red background! \e[0m "
10. "end"


android runtime shell命令打印 shell 打印文件_感叹号_05


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,黄=4 3,蓝=44,紫 =45,青 =46,白 =47.





2,printf :



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

2.1 printf 左对齐输出:



1. echo "----------- printf left alignment ----------------------------"
2. "Hello world!\n"
3. "%-5s %-10s %-4s\n" NO NAME MARK
4. "%-5s %-10s %-4.2f\n" 1 david 100
5. "%-5s %-10s %-4.2f\n" 2 garfield 99.4
6. "%-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 右对齐输出:


1. echo "----------- printf right alignment - default -----------------"
2. "Hello world!\n"
3. "%5s %10s %10s\n" NO NAME MARK
4. "%5s %10s %10.2f\n" 1 david 100
5. "%5s %10s %10.2f\n" 2 garfield 99.4
6. "%5s %10s %10.2f\n" 3 garfield00123 98.789

android runtime shell命令打印 shell 打印文件_转义字符_06

note :

1) printf 默认情况不带“-”是右对齐输出的;

2) 由上图红框所示,无论左对齐、右对齐, 对参数进行格式化输出,不够长度的使用空格补够,但如果长度超长,信息则会完整输出,即不会丟信息;

2.3 printf  带颜色输出信息:

1. echo "---------- shell out color in printf -------------------------"
2. "\e[42;31mPrintf red text and green background!\e[0m\n";

android runtime shell命令打印 shell 打印文件_转义字符_07


note:


1) printf 使用与echo 相同的颜色转义字符与配色值,但 printf 不需要像 echo 哪样带有 "-e" 这样的使能参数。