预热
在终端打印相关信息是脚本程序经常遇到的需要,shell支持多种形式的显示输出,后文详细介绍。
脚本文件的运行方式
脚本文件的执行通常有两种方式:
1.脚本文件名作为命令行参数
bash someScript.sh
2.赋予脚本文件可执行权限,直接在终端执行:
chmod 755 someScript.sh
./someScript.sh
注意:
脚本文件的起始处一般需要通过以下方式制定脚本解释器的路径:
#!/bin/bash
表示该脚本解释器Bash的路径。
该语句必须写在脚本文件的开头,如果写在其他语句之后就被认为是注释。#之后的语句是不被解释器执行,只用来做相关注释说明。
如何做
echo命令是终端打印最简单的命令。默认情况下,echo会在输出语句末尾添加换行。
比如:
![8f12e9a31320e61d1e11021c3d1ea6d4.png](https://i-blog.csdnimg.cn/blog_migrate/9f2e5b4b890d38e9e8abe1654a516e88.jpeg)
或者:
![b8b1734917965421eb3c6864a534039e.png](https://i-blog.csdnimg.cn/blog_migrate/c92c62ab065e7afa9a3623ff9b264dbf.jpeg)
再或者:
![efabfe318f8437a917387cb2ce3e3b63.png](https://i-blog.csdnimg.cn/blog_migrate/32f46273368444aac7d9b53bbef992c3.jpeg)
上面的三种形式都打印出了hello shell,第一种没有任何修饰,第二种hello shell两侧添加了双引号,第三中添加了单引号。
上面的三种形式,结果上看似乎都一样,实际上有大区别:
- 没有单双引号修饰的情形中,不能使用分号,因为分号是shell中命令的分隔符。
![f6689ddd853997073ea73fe69acb3f3e.png](https://i-blog.csdnimg.cn/blog_migrate/584851341de1886f89ebc9ef593082e6.jpeg)
- 双引号允许解释器解析字符串中的特殊字符;
![7b32eed27fd6f4ea462c8a8182abe540.png](https://i-blog.csdnimg.cn/blog_migrate/3f2ab83ec3ed97d81cd61ec3a2879b60.jpeg)
!, 感叹号在shell中有特殊含义,叫做事件提示符,如果要用双引号的形式输出就需要用转义:
![708685ef5b0206568ffe6256d1988b36.png](https://i-blog.csdnimg.cn/blog_migrate/a25b0cc5fbf96cb352bf8f0ad2d04722.jpeg)
- 单引号会禁止这种解析特殊字符的行为,字符串会原样输出;
![347476565269f41f7e6e41417f81c420.png](https://i-blog.csdnimg.cn/blog_migrate/d6a3dbe9bb0496e4ac91ef69ab55159b.jpeg)
另外一种在终端打印消息的方式是使用printf,它使用和C语言中printf相同的参数,考虑下面的例子:
![57f9f6d3596e57331099008ff973a5f4.png](https://i-blog.csdnimg.cn/blog_migrate/b3ba3652548d8947c41fac3ca789dc8c.jpeg)
prfintf支持格式化字符串,格式化字符串可以指定字符宽度,左右对齐方式等。在默认情况下,printf在输出末尾不添加换行符,如果需要换行需要通过显示指定:
#!/bin/bash
# printTest.sh
printf "%-5s %-10.2f" pig01 10000.123445
printf "%-5s %-10.2f" pig02 100000.123445
printf "%-5s %-10.2f" pig03 1000000.123445
![69ee619039529eec386322c37513013a.png](https://i-blog.csdnimg.cn/blog_migrate/730995c870bec2b5884d0b3c9a7e5fe1.jpeg)
上面的语句中%-5s指定字符串的宽度为5个字符,并且左对齐(-表示左对齐),如果不指定-,则右对齐。%-10.2f额外指定小数点后保留两位数字。
扩展
echo 转义
使用echo的双引号输出时,如果字符串包含了转义字符,用参数-e开启转义:
echo -e "abc"
彩色输出
脚本可以通过转义字符在终端打印彩色输出:
![d4bd40e49668564653657932e3e6a106.png](https://i-blog.csdnimg.cn/blog_migrate/0f67bdb06542506d3ce316f9f17a9f12.jpeg)
- 需要用-e开启转义
- e表示转义开始符号
- 转义符号和颜色设置参数之间用[隔开
- m表示结束非常规字符序列
- [和m之间的是字符是颜色组合,中间用分号隔开
可选择的颜色编码如下:
![f656a02e1eecc31b49231f570537b37f.png](https://i-blog.csdnimg.cn/blog_migrate/3e45f9d2c8d32a161d297ba493487a2e.jpeg)
- 前景颜色各数字是对应背景颜色减去10
- 结束非常规字符序列的"m"要紧跟前面的数字,不能有空格