Bash Shell数据与脚本一起存放

Bash Shell数据与脚本一起存放,你需要获得脚本输入,但又不想用单独的文件。

解决方案

使用 <<(here-document)从命令行而非文件重定向输入文本。如果放在 shell 脚本中,则脚本文件可以同时包含数据与代码。
以下是名为 ext 的 shell 脚本示例:

$ cat ext
#
# 下面是here-document
#
grep $1 <<EOF
mike x.123
joe  x.234
sue  x.555
pete x.818
sara x.822
bill x.919
EOF
$

这个脚本可以用于简单的电话号码搜索:

$ ext bill
bill x.919
$

或者:

$ ext 555
sue x.555
$

讨论

grep 命令查找第一个参数是否在指定文件中出现,如果没有指定文件,那么它会在标准输入中查找。

grep 的典型用法如下所示:

grep somestring file.txt

或者:

grep myvar *.c

在脚本 ext 中,通过将待搜索的字符串称为 shell 脚本的参数($1),我们实现了 grep 的参数化。通常我们认为 grep 就是在不同文件中搜索固定的字符串,但这里我们打算在同一批数据中搜索不同的内容。

可以将电话号码保存在文件中,比如 phonenumbers.txt,然后在调用 grep 命令时指定文件名:

grep $1 phonenumbers.txt

但这样就需要两个文件(脚本文件和数据文件),随之而来的问题是:把这两个文件放哪里?如何确保两者集中在一起?

因此,我们不再提供一个或多个用于搜索的文件名,而是设置 here-document,告诉 shell 将标准输入重定向(临时)到此处。

<< 语法表示我们想创建一个临时输入源,EOF 是一个任意的字符串(你想用什么都行),用作临时输入的终止符。它并不属于输入的一部分,只是作为标记告诉输入在哪里结束。正常的 shell 脚本(如果有的话)会在该标记之后继续。

你可以给 grep 命令加入 -i 选项,以示搜索时不区分大小写。这样便可以使用 grep -i $1<<EOF同时搜索“Bill”或“bill”。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!