我是unix中的新成員。我必須編寫一個shell腳本,它可以逐行讀取文件並將其存儲在單獨的變量中。我的文本文件內容有多個源路徑和一個目標路徑。 這樣的東西::如何在shell腳本中逐行讀取文件並將每行存儲在變量中
source_path=abc/xyz
source_path=pqr/abc
desination_path=abcd/mlk
源路徑的數量可能會有所不同。 我在Unix上沒有太多的經驗。任何人都可以幫助我實現這一目標。這將是非常有益的。
在此先感謝
我是unix中的新成員。我必須編寫一個shell腳本,它可以逐行讀取文件並將其存儲在單獨的變量中。我的文本文件內容有多個源路徑和一個目標路徑。 這樣的東西::如何在shell腳本中逐行讀取文件並將每行存儲在變量中
source_path=abc/xyz
source_path=pqr/abc
desination_path=abcd/mlk
源路徑的數量可能會有所不同。 我在Unix上沒有太多的經驗。任何人都可以幫助我實現這一目標。這將是非常有益的。
在此先感謝
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
有點哈克,但這應該工作:
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命令將刪除前導和尾隨"
(如果不存在引號,則字符串將按原樣傳遞)。
#!/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
你要存儲在一個變量的所有soure_paths說用冒號隔開? – codaddict 2010-09-15 17:31:56
不,不,我要存儲在一個單獨的可變 – MAS1 2010-09-15 17:35:01