Answers:
要从文件中读取变量,我们可以使用source
or .
命令。
假设文件包含以下行
MYVARIABLE="Any string"
然后我们可以使用导入该变量
#!/bin/bash
source <filename>
echo $MYVARIABLE
<filename>
将在您的shell中运行,例如rm -rf /
,这可能非常危险。
sed
add local
关键字并使脚本更加安全,并且不会污染全局范围。所以在一个函数里面做cat global_variables.sh | sed -e 's/^/local /' > local_variables.sh
然后使用. ./local_variables.sh
。您在函数中导入的任何内容仅在该函数中可用。请注意,它假设global_variables.sh
每行仅包含一个变量。
考虑到您希望将文本文件的所有内容保留在变量中,可以使用:
#!/bin/bash
file="/path/to/filename" #the file where you keep your string name
name=$(cat "$file") #the output of 'cat $file' is assigned to the $name variable
echo $name #test
或者,以纯正的方式:
#!/bin/bash
file="/path/to/filename" #the file where you keep your string name
read -d $'\x04' name < "$file" #the content of $file is redirected to stdin from where it is read out into the $name variable
echo $name #test
echo $name
。我仅将其用于测试。接下来,您可以使用$name
变量在脚本中的任何位置进行进一步处理。
$name
变量的值是使用cat $file
命令分配的文件中的字符串。什么不清楚或很难理解?
$file
如果只使用一次来加载$name
变量,则使用单独的变量是多余的,只需使用cat /path/to/file
在脚本中,您可以执行以下操作:
read name < file_containing _the_answer
您甚至可以多次执行此操作,例如循环执行
while read LINE; do echo "$LINE"; done < file_containing_multiple_lines
一种替代方法是将标准输入重定向到文件,在该文件中,所有用户输入均按程序预期的顺序排列。例如,使用程序(称为script.sh
)
#!/bin/bash
echo "Enter your name:"
read name
echo "...and now your age:"
read age
# example of how to use the values now stored in variables $name and $age
echo "Hello $name. You're $age years old, right?"
和输入文件(称为input.in
)
Tomas
26
您可以通过以下两种方式之一在终端上运行此程序:
$ cat input.in | ./script.sh
$ ./script.sh < input.in
这相当于只运行脚本并手动输入数据-它会打印“ Hello Tomas。您今年26岁,对吧?”。
正如RaduRădeanu所建议的那样,您可以cat
在脚本内部使用将文件的内容读取到变量中-在这种情况下,您需要每个文件仅包含一行,并且只包含该特定变量所需的值。在上面的例子中,你输入文件分割成一个名为(比如说name.in
)和一个与年龄(比如age.in
),并更改read name
,并read age
线name=$(cat name.in)
和age=$(cat age.in)
分别。
vh=$(awk "NR==3 {print;exit}" /var/www/test.txt)
。然后,您将字符串保存在variable中$vh
,因此可以像这样使用它:mkdir "/var/www/$vh"
-这将在/ var / www中创建一个具有指定名称的文件夹。
我在这里找到了有效的解决方案:https : //af-design.com/2009/07/07/loading-data-into-bash-variables/
if [ -f $SETTINGS_FILE ];then
. $SETTINGS_FILE
fi
#! /bin/bash
# (GPL3+) Alberto Salvia Novella (es20490446e)
variableInFile () {
variable=${1}
file=${2}
source ${file}
eval value=\$\{${variable}\}
echo ${value}
}
variableInFile ${@}
KEY=VALUE
成对?解决方案是完全不同的(如果是后者,则应使用Takkat的答案,而应使用前Radu的方法)