5. 命令替换和常量
优质
小牛编辑
134浏览
2023-12-01
在上一节的基础上,我们给脚本加上更新时间及更新人信息:
#!/bin/bash
# sysinfo_page - A script to produce an HTML file
title="System Information for"
cat <<- _EOF_
<html>
<head>
<title>
$title $HOSTNAME
</title>
</head>
<body>
<h1>$title $HOSTNAME</h1>
<p>Updated on $(date +"%x %r %Z") by $USER</p>
</body>
</html>
_EOF_
这里我们使用了另一个环境变量 USER
,来获取用户名。 另外,我们使用了 $(date +"%x %r %Z")
。其中 $()
告诉 shell 「使用括号中的命令结果替换」。你可以通过如下方式查看 date
命令的帮助。 $(command)
也可以用反引号来代替:`command`。旧的形式是和 sh 兼容的。所以,以下命令是相等的:
$(command)
`command`
将命令结果赋予给一个变量
right_now=$(date +"%x %r %Z")
变量也可以嵌套,如:
right_now=$(date +"%x %r %Z")
time_stamp="Updated on $right_now by $USER"
常量
正如 常量 其名字所表明的,是用于存储会改变的东西。这意味着在脚本执行过程中,变量的内容可能会改变。 另一方面,可能存在只要设置后就不会再变的值。这种叫做 常量。大部分语言都有 常量 的用法,bash 也有,但很少看到。而且,如果一个值看起来像一个常数,那么程序员应该给他一个全大写的名字,即使没有强制要求。 环境变量通常是全大写的,因为它们通常不会改变。所以,建议在写脚本时,给变量小写名字,给常量大写名字。 例如:
#!/bin/bash
# sysinfo_page - A script to produce an HTML file
title="System Information for $HOSTNAME"
RIGHT_NOW=$(date +"%x %r %Z")
TIME_STAMP="Updated on $RIGHT_NOW by $USER"
cat <<- _EOF_
<html>
<head>
<title>
$title
</title>
</head>
<body>
<h1>$title</h1>
<p>$TIME_STAMP</p>
</body>
</html>
_EOF_