我是unix的新手。我必须编写一个shell脚本,逐行读取文件并将其存储在一个单独的变量中。我的文本文件内容有多个源路径和一个目标路径。 像这样的东西::
source_path=abc/xyz
source_path=pqr/abc
desination_path=abcd/mlk
源路径的数量可以变化。 我在Unix上没有多少经验。任何人都可以帮助我实现这一目标。这将非常有帮助。
提前致谢
答案 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