echo printf
printf命令模仿C程序库(library)里的printf()库程序(library
routine)。它几乎复制了
该函数的所有功能。不过在Shell层级的版本上,会有些差异。由于printf的行为是由POSIX
标准所定义,因此使用printf的脚本比使用echo移植性好。
如同echo命令,printf命令可以输出简单的字符串:
[[email protected]
~]#printf "Hello, Shell\n"
Hello, Shell
[[email protected] ~]#
你应该可以马上发现,最大的不同在于:printf不像echo那样会自动提供一个换行符号。你必须显式
地将换行符号指定成\n。
echo -n
"Enter your name:"
//参数-n的作用是不换行,echo默认是换行
要使转义符生效,需加参数-e
在echo命令输出之后附加换行,可以使用\n选项:
$ cat
>echo
#!/bin/bash
echo -e "this echo‘s 3 new lines\n\n\n"
echo
"OK"
$ echo "The log files have all been done" >myfile
$ echo "$LOGNAME
carried them out at `date`" >>myfile
$ echo
"\"/dev/rmt0"\"
"/dev/rmt0"
事实上,echo 除了 -n options 之外,常用选项还有:
-e
:启用反斜线控制字符的转换(参考下表)
-E :关闭反斜线控制字符的转换(预设如此)
-n :取消行末之换行符号(与 -e 选项下的 c
字符同意)
关于 echo 命令所支持的反斜线控制字符如下表:
\a:ALERT / BELL (从系统喇叭送出铃声)
\b:BACKSPACE
,也就是向左删除键
\c:取消行末之换行符号
\E:ESCAPE,跳脱键
\f:FORMFEED,换页字符
\n:NEWLINE,换行字符
\r:RETURN,回车键
\t:TAB,表格跳位键
\v:VERTICAL
TAB,垂直表格跳位键
:ASCII 八进位编码(以 x 开首为十六进制) :反斜线本身
$ echo -e
"a\tb\tc\nd\te\tf"
a b c
d e f
上例运用 \t 来区隔 abc 还有 def ,及用\n 将 def 换至下一行。
例二:
$ echo -e "\141\011\142\011\143\012\144\011\145\011\146"
a b
c
d e f
与例一的结果一样,只是使用 ASCII 八进位编码。
例三:
$ echo -e "\x61\x09\x62\x09\x63\x0a\x64\x09\x65\x09\x66"
a b
c
d e f
与例二差不多,只是这次换用 ASCII
十六进制编码。
测试变量是否已经设置
有时要测试是否已设置或初始化变量。如果未设置或初始化,就可以使用另一值。此命令格式为:
$ { v a
r i a b l e : - v a l u e }
意即如果设置了变量值,则使用它,如果未设置,则取新值。例如:
$
COLOUR=blue
$ echo "The sky is ${COLOR:-grey} today"
The sky is grey
today
变量c o l o u r取值b l u e,e c h o打印变量c o l o u
r时,首先查看其是否已赋值,如果查到,则使
用该值。变量$COLOR没有设置,所以会打印后面的grey
上面的例子并没有将实际值传给变量,需使用下述命令完成此功能:
$ { v a r i a b l e : = v a l u e
}
下面是一个更实用的例子。查询工资清单应用的运行时间及清单类型。在运行时间及类
型输入时,敲回车键表明用户并没有设置两个变量值,将使用缺省值( 0
3 : 0 0和We e k l y),并
传入a t命令中以按时启动作业。
#!/bin/bash
# vartest
echo
"what time do you wish start the payroll [03:00]:"
read TIME
echo "
process to start at ${TIME:=03:00} OK"
echo "Is it a monthly or weekly run
[Weekly]:"
read RUN_TYPE
echo "Run type is ${RUN_TYPE:=Weekly}‘
at -f
$RUN_TYPE $TIME
在输入域敲回车键,输出结果如下:
what time do you wish start the payroll
[03:00]:
process to start at 03:00 OK
Is it a monthly or weekly run [Weekly]:
Run type is Weekly