将文件中的行读入shell脚本中的2个变量

时间:2011-09-08 17:18:09

标签: shell

我有一个包含2行的文件,我想分别将它们读成2个变量。我如何在shellscript(bash)中完成此任务?

5 个答案:

答案 0 :(得分:2)

您可以在shell中打开文件描述符来读取变量:

#!/bin/bash

# open file
exec 6<tst.txt

read foo <&6
read bar <&6

# close file again
exec 6<&-

echo $foo $bar

编辑:

作为快速解释,这是使用IO重定向。通常,文件描述符按如下方式处理:

  • 0 stdin(输入)
  • 1 stdout(输出)
  • 2 stderr(错误)

但是,没有什么可以防止使用其他文件描述符(最多9个),所以我们在文件描述符6中打开“tst.txt”文件,并使用IO redirection从中读取。

因此,exec 6<tst.txt打开文件描述符6并将tst.txt重定向到其中,而exec 6<&-再次关闭它。

答案 1 :(得分:1)

我很遗憾现在不在linux上进行测试,但这很接近。

#!/bin/bash
file="/path/to/file"
# Store the previous IFS so we don't break anything else in the script.
prevIFS='$IFS'
# You need the line break to capture a newline.
IFS='
'
read var1 var2 < $file
echo "Var1: $var1"
echo "Var2: $var2"

# Set IFS back to normal
IFS='$prevIFS'

答案 2 :(得分:0)

试试这个

#!/bin/bash

I=0
while read; do
  VAR[$I]=$REPLY
  ((I++))
done < file

echo ${VAR[0]}
echo ${VAR[1]}

这适用于超过2行的文件

答案 3 :(得分:0)

您可以重新配置输入文件(带变量)作为shell代码吗?即。

 $ cat varFile
     var1=xyz
     var2=abc

 $ cat myShellScript.sh
   #/bin/whatever (bash)?

   # source the variable file
   . /path/to/varFile

   echo $var1
   echo $var2

这是shell脚本中的标准概念,可以更轻松地管理需要根据运行系统的物理硬件来控制(unix / linux)环境的配置问题。如果这是您关注的一部分,请告诉我,我将更新示例代码以扩展此技术。

我希望这会有所帮助。

答案 4 :(得分:0)

最简单的答案是使用requestError命令。假设您的文件名是file.txt

sed

var1=($(sed '1q;d' file.txt)) var2=($(sed '2q;d' file.txt)) 1q定义行号。 第1行中的所有值都将分配给var1,类似于var2。