read,source,mapfile命令与shell编程

admin 2022年5月15日01:38:14安全文章评论3 views1962字阅读6分32秒阅读模式

Bash 是一种相当强大的编程语言,也很容易上手。这里有一些鲜为人知但很有用的 bash 命令,它们将有助于使你编写的 shell 脚本更清晰、更易于维护。毕竟,它几乎是你打开终端时最经常看到的 shell

Bash 是一种相当强大的编程语言,也很容易上手。这里有一些鲜为人知但很有用的 bash 命令,它们将有助于使你编写的 shell 脚本更清晰、更易于维护。毕竟,它几乎是你打开终端时最经常看到的 shell。

Bash 中有一些你可能不知道的强大命令,即使你对该语言的使用相当熟练。但是,这些命令都是非常目的性,并且可以使你编写的 shell 脚本更清晰、更易于维护,并且比以前更强大。

在本教程中,我们将说明如何使用 read,mapfile,source 命令在 bash 脚本中的实际应用。我们举例一些常见的例子,希望能对有所帮助。

read 命令询问用户的输入

read 命令允许脚本接受用户输入,并将输入存储在变量中。

#!/usr/bin/env bash
echo "What is your name?"
read name
echo "Your name is ${name}!"

这将等待用户的输入,然后将name变量的值设置为用户输入的字符串。

例如,如果你在运行上述脚本时指定rumenz.com为你的姓名,它将输出Your name is rumenz.com

你还可以通过-pread命令指定选项来使上面的示例更加优雅,该选项将打印在 之后指定的字符串-p,然后要求用户输入:

#!/usr/bin/env bash
read -p "What is your name? " name
echo "Your name is ${name}!"

你还会注意到我在What is your name?之后添加了一个空格。如果我们不添加它,这会让用户在输入时看起来更奇怪。

mapfile 命令将文件的行转换 Bash 数组

你可以使用mapfile命令读取文件的内容,然后将输出分配给 Bash 数组,只要在文件中遇到换行符,就会创建一个数组元素。

例如,我们创建一个名为的文件file.txt,其中包含以下文本:

Line 1
Line 2
Line 3
Line 4
Line 5

你可以通过运行以下命令将此文件转换为 Bash 数组,该命令将文件的内容分配给file_var变量:

#!/usr/bin/env bash
mapfile file_var < file.txt

for i in "${file_var[@]}"do
 echo "${i}"
done

你会注意到上面的内容也会产生一些奇怪的间隔输出,这些输出与文件内的内容不一致,这可以通过向命令添加-t选项来解决:

#!/usr/bin/env bash
mapfile -t file_var < file.txt

for i in "${file_var[@]}"do
 echo "${i}"
done

最后,你可能会注意到以下内容不起作用:

#!/usr/bin/env bash
cat file.txt | mapfile -t file_var

这是因为mapfile管道右侧的命令是在子 shell 执行的。换句话说,是在一个新的 Bash 实例中运行的,它无法影响你当前的 shell。

source 命令将文件中的变量导入 shell 的环境变量中

假设你有以下虚构文件config.sh其内容如下:

username=rumenz
domain=rumenz.com

如果你想获取该文件的内容并将其放入当前 shell 的环境变量中,这可以通过使用 source 命令非常简单地完成:

source config.sh

然后,你可以检查变量是否按预期分配。source命令实际上在当前 shell 的环境中运行指定的文件,因此在该文件中的任何命令都会被执行.

例如,让我们将以下内容放入config.sh

echo "Hello ${name}!"
echo "Have a good day!"

然后,如果我们运行soure config.sh,你将看到两个echo命令得到运行,以及name变量被分配:你也可以使用.代替source,其作用与此相同source


 热文推荐  


欢迎关注LemonSec

觉得不错点个“赞”、“在看”哦

原文始发于微信公众号(LemonSec):read,source,mapfile命令与shell编程

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月15日01:38:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  read,source,mapfile命令与shell编程 http://cn-sec.com/archives/1004747.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: