如何在shell脚本中逐行读取文件并将每行存储在变量中

时间:2010-09-15 17:27:17

标签: file shell unix

我是unix的新手。我必须编写一个shell脚本,逐行读取文件并将其存储在一个单独的变量中。我的文本文件内容有多个源路径和一个目标路径。 像这样的东西::

source_path=abc/xyz
source_path=pqr/abc
desination_path=abcd/mlk

源路径的数量可以变化。 我在Unix上没有多少经验。任何人都可以帮助我实现这一目标。这将非常有帮助。

提前致谢

3 个答案:

答案 0 :(得分:4)

sourcePaths=( $(grep source_path myfile |cut -d= -f2) )
destPath=`grep destination_path myfile |cut -d= -f2`

$sourcePaths是一个source_path的数组。您不需要将每个source_path存储在单独的变量中。

您可以遍历数组并使用每个source_path执行所需操作。例如:

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

答案 1 :(得分:1)

有点hacky但这应该有效:

old_IFS="$IFS"
IFS="="

while read left right ; do
  echo "Left side: $left"
  echo "Right side: $right"
done < $input_file

IFS="$old_IFS"

如果你想摆脱"中的$right,你可能会做right_content=$(sed 's|"\(.*\)"|\1|' <<<$right)之类的事情。 <<<$right几乎就像执行echo $right一样,sed命令将删除前导和尾随"(如果不存在引号,则字符串将按原样传递)。< / p>

答案 2 :(得分:0)

    #!/bin/sh
#path to config file
CONFIG_FILE=/tmp/conf.log
#check if file exist
if [[ -f $CONFIG_FILE ]]; then
#use source filename or .file name
    . $CONFIG_FILE
#test variable
echo "source is $source"
echo "dest is $dest"
fi
相关问题