在shell脚本中的打印输出通常会有echo和printf两种,前者会自动换行。
一、echo
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。您可以使用echo实现更复杂的输出格式控制。
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 ~]# name=”OK” [root@localhost ~]# echo “$name It is a test” “”OK” It is a test” [root@localhost ~]# echo $name It is a test ”OK” It is a test [root@localhost ~]#
以下的转义字符都可在echo中使用
转义字符 | 含义 |
\\ | 反斜杠 |
\a | 警报,响铃 |
\b | 退格(删除键) |
\f | 换页(FF),将当前位置移到下页开头 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符(tab键) |
\v | 垂直制表符 |
echo
-e开启转义
-E禁止转义,默认也是不转义的
4、read
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量。
[root@localhost ~]# cat echo_var.sh #!/bin/sh read name echo "$name It is a test" [root@localhost ~]# chmod 755 echo_var.sh [root@localhost ~]# [root@localhost ~]# ./echo_var.sh var1 var1 It is a test
5、显示结果定向至文件
[root@localhost ~]# echo "It is a test" > myfile [root@localhost ~]# [root@localhost ~]# cat myfile It is a test
6、原样输出字符串,不进行转义或取变量(用单引号)
[root@localhost ~]# echo '$name\"' $name\"
7、显示命令执行结果
反引号
[root@localhost ~]# echo `date` Mon Mar 25 22:07:23 CST 2019
二、printf
printf 命令用于格式化输出,是echo命令的增强版。
printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认printf不会像 echo 自动添加换行符,我们可以手动添加换行符\n。
[root@localhost ~]# echo "Hello, Shell" Hello, Shell [root@localhost ~]# printf "Hello, Shell\n" Hello, Shell
格式替代符:
%b 相对应的参数被视为含有要被处理的转义序列之字符串。
%c ASCII字符。显示相对应参数的第一个字符
%d, %i 十进制整数
%e, %E, %f 浮点格式
%g %e或%f转换,看哪一个较短,则删除结尾的零
%G %E或%f转换,看哪一个较短,则删除结尾的零
%o 不带正负号的八进制值
%s 字符串
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10至15
%X 不带正负号的十六进制值,使用A至F表示10至15
%% 字面意义的%
三、test
test 命令是Shell环境中测试条件表达式的使用工具,用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
1、数值测试
参数 | 说明 |
-eq | 等于则为真 |
-ne | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于等于则为真 |
实例:
[root@localhost ~]# vi test.sh #!/bin/bash num1=100 num2=100 if test $[num1] -eq $[num2] then echo '两个数相等!' else echo '两个数不相等!' fi [root@localhost ~]# chmod 755 test.sh [root@localhost ~]# [root@localhost ~]# ./test.sh 两个数相等!
2、字符串测试
参数 | 说明 |
= | 等于则为真 |
!= | 不相等则为真 |
-z 字符串 | 字符串的长度为零则为真 |
-n 字符串 | 字符串的长度不为零则为真 |
实例:
[root@localhost ~]# vi test1.sh #!/bin/bash num1="ru1noob" num2="wiki" if test $num1 = $num2 then echo '两个字符串相等!' else echo '两个字符串不相等!' fi [root@localhost ~]# chmod 755 test1.sh [root@localhost ~]# [root@localhost ~]# ./test1.sh 两个字符串不相等!
3、文件测试
参数 | 说明 |
-e 文件名 | 如果文件存在则为真 |
-r 文件名 | 如果文件存在且可读则为真 |
-w 文件名 | 如果文件存在且可写则为真 |
-x 文件名 | 如果文件存在且可执行则为真 |
-s 文件名 | 如果文件存在且至少有一个字符则为真 |
-d 文件名 | 如果文件存在且为目录则为真 |
-f 文件名 | 如果文件存在且为普通文件则为真 |
-c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
-b 文件名 | 如果文件存在且为块特殊文件则为真 |
[root@localhost ~]# vi test2.sh #!/bin/bash cd /bin if test -e ./bash then echo '文件已存在!' else echo '文件不存在!' fi [root@localhost ~]# chmod 755 test2.sh [root@localhost ~]# [root@localhost ~]# ./test2.sh 文件已存在!
4、条件测试
Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为::“!”最高,“-a”次之,“-o”最低。
实例
[root@localhost ~]# vi test3.sh #!/bin/bash cd /bin if test -e ./notFile -o -e ./bash then echo '有一个文件存在!' else echo '两个文件都不存在' fi [root@localhost ~]# chmod 755 test3.sh [root@localhost ~]# [root@localhost ~]# ./test3.sh 有一个文件存在!
end