路漫漫其修远兮
吾将上下而求索

shell编程(3):echo和printf命令

echo命令用法

        linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法,echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

该命令的一般格式为: echo [ -n ] 字符串

        其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。

        用echo命令输出加引号的字符串时,将字符串原样输出;

        用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。

语   法:echo [-ne][字符串]

                echo [–help][–version]

补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。

参   数:-n 不要在最后自动换行

                 -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

\a 发出警告声
\b 删除前一个字符
\c 最后不加上换行符号
\f 换行但光标仍旧停留在原来的位置
\n 换行且光标移至行首
\r 光标移至行首,但不换行
\t 插入tab
\v 与\f相同
\\ 插入\字符
\nnn 插入nnn(八进制)所代表的ASCII字符

 

1、显示普通的字符串,双引号可以省略

[root@localhost ~]#echo "it is a test"
it is a test
[root@localhost ~]#echo it is a test
it is a test

2、显示转义字符

[root@localhost ~]#echo "\"it is a test\""
"it is a test"

3、显示变量

[root@localhost ~]#vim test.sh 
#!/bin/bash

read name
echo "$name is me"
[root@localhost ~]#./test.sh 
bob    #标准输入
bob is me

4、显示命令执行结果

        命令的执行结果赋值给某个变量有两种方式:

                value=`command`

                value=$(command)

[root@localhost ~]#echo `date`
Sun Apr 2 23:27:19 CST 2017
[root@localhost ~]#echo $(date)
Sun Apr 2 23:27:27 CST 2017

5、echo -e  启用反斜杠转义的功能,意思是所有反斜杠字符都是有特殊功能,

[root@localhost ~]#echo -e "what a beautiful day"    #正常输出
what a beautiful day
[root@localhost ~]#echo -e "what a beautiful day\c"    #默认是最后换行,-c:不换行
what a beautiful day[root@localhost ~]#
[root@localhost ~]#echo -e "what a beautiful day\nyes"    #换行
what a beautiful day
yes
[root@localhost ~]#echo -e "what a\tbeautiful day\nyes\r"    #加一个tab,空格
what a	beautiful day
yes
[root@localhost ~]#echo -e "what a\tbeautiful day\nyes\\"    #显示\
what a	beautiful day
yes\

6、echo显示字符颜色

shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 

格式如下: 

echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"

例如: 

echo -e "\033[41;36m something here \033[0m"

其中41的位置代表底色, 36的位置是代表字的颜色 ,最后是控制字符,含义见下面

注: 

  1、字背景颜色和文字颜色之间是英文的";" 

  2、文字颜色后面有个m 

  3、字符串前后可以没有空格,如果有的话,输出也是同样有空格 

下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配 

例如

echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[34m 黄色字 \033[0m"
echo -e "\033[41;33m 红底黄字 \033[0m"
echo -e "\033[41;37m 红底白字 \033[0m"

Image 001.jpg

——————

字颜色:30—–37 

echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"

Image 002.jpg

—————————

字背景颜色范围:40—–47 

echo -e "\033[40;37m 黑底白字 \033[0m" 
echo -e "\033[41;37m 红底白字 \033[0m" 
echo -e "\033[42;37m 绿底白字 \033[0m" 
echo -e "\033[43;37m 黄底白字 \033[0m" 
echo -e "\033[44;37m 蓝底白字 \033[0m" 
echo -e "\033[45;37m 紫底白字 \033[0m" 
echo -e "\033[46;37m 天蓝底白字 \033[0m"
echo -e "\033[47;30m 白底黑字 \033[0m"

Image 003.jpg

7、echo控制字符闪烁

如果要将文字添加一些控制符号,例如闪烁灯花样,需要设置如下

echo -e "\033[背景颜色;字符颜色;控制字符m字符串\033[0m"

例如:显示结果为绿底黑字,然后在闪烁,这里的5是控制字符,具体的含义见下面,代表闪烁的功能,“\033[42;30;5m”这是一个控制符号,是对后面显示的字符生效,即“***”,后面又是一个控制符“\033[0m”表示将所有的属性都清除掉,也是对后面的字符生效,意思是后面所有的显示都是正常的了,

echo -e "\033[42;30;5m***\033[0m"

Image 004.jpg

如果后面的控制符号没有的话,连下面的终端都会一同跟着闪烁,

[root@localhost ~]#echo -e "\033[42;30;5m***"

Image 005.jpg

最后面控制选项说明 

\33[0m 关闭所有属性 
\33[1m 设置高亮度 
\33[4m 下划线 
\33[5m 闪烁 
\33[7m 反显 
\33[8m 消隐 
\33[30m — \33[37m 设置前景色 
\33[40m — \33[47m 设置背景色 
\33[nA 光标上移n行 
\33[nB 光标下移n行 
\33[nC 光标右移n行 
\33[nD 光标左移n行 
\33[y;xH设置光标位置 
\33[2J 清屏 
\33[K 清除从光标到行尾的内容 
\33[s 保存光标位置 
\33[u 恢复光标位置 
\33[?25l 隐藏光标 
\33[?25h 显示光标

示例:显示闪烁的三角形在命令界面

[root@localhost ~]#echo -e "\033[;;5m*********\033[0m  \n \033[;;4m*******\033[0m \n \033[;31m*****\033[0m \n  \033[42;30;5m***\033[0m  \n    \
\033[43;32;4m*\033[0m"

执行结果:第一行和第四行在闪烁

Image 006.jpg

8、模拟服务启动

这样和正常的服务脚本显示的启动打印的界面是一样的,以后可以自己写服务脚本来实现服务的启动和停止,下面有更好的方法,可以格式化输出

[root@localhost ~]#vim test.sh 
#!/bin/bash

echo -e "stopping nginx:                                            \c"
touch a
echo -e "[\033[32m  OK  \033[0m]"

echo -e "starting nginx:                                            \c"
touch a
echo -e "[\033[31mFAILED\033[0m]"

[root@localhost ~]#./test.sh 
stopping nginx:                                            [  OK  ]
starting nginx:                                            [FAILED]

[root@localhost ~]#service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [FAILED]

9、printf函数

        printf 命令模仿 C 程序库(library)里的 printf() 程序。使用printf的脚本比使用echo移植性好。

        printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认printf不会像 echo 自动添加换行符,我们可以手动添加 \n。

printf 命令的语法:

        printf  format-string  [arguments…]

参数说明:

        format-string: 为格式控制字符串

        arguments: 为参数列表。

例子:printf不会自动换行

[root@localhost ~]#echo "hello world"
hello world
[root@localhost ~]#printf "hello world"
hello world[root@localhost ~]#
[root@localhost ~]#printf "hello world \n"
hello world

例子:格式化输出,最好都使用英文,英文下一个空格和一个字符占的宽度是一样的,如果既有英文,又有中文,输出是正确的,但是一个汉字占1.5个位置,看起来不是对齐的

[root@localhost ~]#cat a.sh
#!/bin/bash

printf "%-10s %-8s %-4s\n" name sex kg
printf "%-10s %-8s %-4.2f\n" andy man 66.1234
printf "%-10s %-8s %-4.2f\n" bob woman  48.1

[root@localhost ~]#bash a.sh 
name       sex      kg  
andy       man      66.12
bob        woman    48.10

说明:

        %s %c %d %f都是格式替代符

        %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

        %-4.2f 指格式化为小数,其中.2指保留2位小数。

printf也有转义符,遇到转义符,安装转义符的含义来进行操作

序列 说明
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符

不能输出颜色,不好,要想实现rpm安装的服务那样来启动关闭服务的时候显示ok和failed,用下面的方法来实现,感觉是个好方法,不管前面的字符多长,都会格式化输出

[root@localhost ~]#vim a.sh 
#!/bin/bash

printf "%-59s" "Starting nginx:"
echo -e "[\033[32m  OK  \033[0m]"
printf "%-59s" "Stopping nginx:"
echo -e "[\033[31mFAILED\033[0m]"
echo
printf "%-59s" "Starting mysqld:"
echo -e "[\033[32m  OK  \033[0m]"
printf "%-59s" "Stopping mysqld:"
echo -e "[\033[31mFAILED\033[0m]"
[root@localhost ~]#bash a.sh 
Starting nginx:                                            [  OK  ]
Stopping nginx:                                            [FAILED]

Starting mysqld:                                           [  OK  ]
Stopping mysqld:                                           [FAILED]

未经允许不得转载:江哥架构师笔记 » shell编程(3):echo和printf命令

分享到:更多 ()

评论 抢沙发

评论前必须登录!