4

read,source,mapfile命令与shell编程

 2 years ago
source link: https://www.myfreax.com/read-source-mapfileming-ling-yu-shellbian-cheng/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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变量的值设置为用户输入的字符串。

例如,如果您在运行上述脚本时指定myfreax.com为你的姓名,它将输出Your name is myfreax.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=myfreax
domain=myfreax.com

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

source config.sh

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

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

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

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

你学习如何使用read命令询问用户的输入。如何使用mapfile命令将文件的行转换Bash数组。如何source命令将文件中的变量导入shell的环境变量中。也知道source命令的别名. 。如果您有任何疑问或反馈,请随时在下面评论。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK