Chinaunix首页 | 论坛 | 博客
  • 博客访问: 382747
  • 博文数量: 181
  • 博客积分: 215
  • 博客等级: 民兵
  • 技术积分: 313
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-17 19:39
个人简介

王的男人

文章分类

全部博文(181)

文章存档

2016年(2)

2015年(35)

2014年(17)

2013年(84)

2012年(49)

我的朋友

分类: LINUX

2013-03-29 22:22:29

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

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

  1. echo "----------- echo without quotes ------------------------------"
  2. echo Hello world ! ; Nice to meet
  3. 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 后面使用双引号输出信息:

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

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

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

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

note :
1) echo 使用单引号输出信息时,变量是不会被展开的,即把变量符号直接当成字符串输出,而不是把变量符号展开表示成它的值输出。
2) echo 使用单引号输出信息时,可以带感叹号,手动、脚本执行均无此限制,如图所示:

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

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

  1. echo "----------- shell out color in echo --------------------------"
  2. echo -e -n "\e[1;31m This is the red text \t1\t2\t3 !\e[0m "
  3. echo "end"
  4. echo -e -n "\e[42;31m This is the red text and green background!\e[0m "
  5. echo "end"
  6. export GreenBackgroundText="green background"
  7. echo -e -n "\e[45;31m This is the red text and magenta back ground with variable $GreenBackgroundText! \e[0m "
  8. echo "end"
  9. echo -e -n "\e[1;41m This is only the red background! \e[0m "
  10. 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 左对齐输出:

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

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


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

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


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

阅读(560) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~