как читать файл построчно в скрипте оболочки и хранить каждую строку в переменной - PullRequest
1 голос
/ 15 сентября 2010

Я новичок в Unix.Я должен написать сценарий оболочки, который читает строку за строкой и сохраняет его в отдельной переменной.мой текстовый файл содержит несколько исходных и один целевой путь.как то так:

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

номер пути к исходному тексту может варьироваться.У меня мало опыта в Unix.Может ли кто-нибудь помочь мне достичь этого.Это будет очень полезно.

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 16 сентября 2010
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 голос
/ 15 сентября 2010

Немного хак, но это должно сработать:

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 удалит начальные и конечные символы " (если кавычки отсутствуют, строка будет просто передана как есть).

0 голосов
/ 18 января 2013
    #!/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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...