侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

绿泡泡:___zze,添加备注来意

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

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

zze
zze
2019-12-23 / 0 评论 / 0 点赞 / 567 阅读 / 1875 字

本部分内容参考自《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,就这样为新的一天创建一个新文件。

0

评论区