Shell脚本编程(2)之命令替换

Shell脚本编程(2)之命令替换

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

本部分内容参考自《Linux命令行与shell脚本编程大全 第3版》。

Shell 脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。把输出赋给变量之后,就可以随意在脚本中使用了。这个特性在处理脚本数据时尤为方便。
有两种方法可以将命令输出赋给变量:

  • 反引号字符”`“;
  • $( command ) 格式;

要注意反引号字符,这可不是用于字符串的那个普通的单引号字符。由于在 Shell 脚本之外很少用到,你可能甚至都不知道在键盘什么地方能找到这个字符。但你必须慢慢熟悉它,因为这是许多 Shell 脚本中的重要组件。提示:在美式键盘上,它通常和波浪线( ~)位于同一键位。
命令替换允许你将 Shell 命令的输出赋给变量。尽管这看起来并不那么重要,但它却是脚本编程中的一个主要组成部分。
要么用一对反引号把整个命令行命令围起来:

testing='date'
```bash
要么使用 `$()` 格式:

testing=$(date)

Shell 会运行命令替换符号中的命令,并将其输出赋给变量 `testing`。注意,赋值等号和命令替换字符之间没有空格。这里有个使用普通的 `Shell` 命令输出创建变量的例子。
``` bash
$ cat test4.sh 
#!/bin/bash
testing=$(date)
echo "The date and time are: " $testing

变量 testing 获得了 date 命令的输出,然后使用 echo 语句显示出它的值。运行这个 Shell 脚本生成如下输出。

$ ./test4.sh 
The date and time are:  Tue Dec 17 13:54:00 CST 2019

这个例子毫无吸引人的地方(也可以干脆将该命令放在 echo 语句中),但只要将命令的输出放到了变量里,你就可以想干什么就干什么了。
下面这个例子很常见,它在脚本中通过命令替换获得当前日期并用它来生成唯一文件名。

$ cat test5.sh 
#!/bin/bash
today=$(date +%y%m%d)
ls /usr/bin -al > log.$today

today 变量是被赋予格式化后的 date 命令的输出。这是提取日期信息来生成日志文件名常用的一种技术。 +%y%m%d 格式告诉 date 命令将日期显示为两位数的年月日的组合。

$ date +%y%m%d
191217

这个脚本将日期值赋给一个变量,之后再将其作为文件名的一部分。文件自身含有目录列表的重定向输出。运行该脚本之后,应该能在目录中看到一个新文件。

$ ll log.*
-rw-r--r--. 1 root root 65109 Dec 17 13:55 log.191217

目录中出现的日志文件采用 $today 变量的值作为文件名的一部分。日志文件的内容是 /usr/bin 目录内容的列表输出。如果脚本在明天运行,日志文件名会是 log.191218,就这样为新的一天创建一个新文件。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/shell-2.html

Buy me a cup of coffee ☕.