从文件中读取时在shell脚本中拆分String

时间:2014-12-16 08:49:34

标签: bash shell

我有一个以下脚本应该从" .properties"文件,然后在" ="的基础上对其进行标记。将值分隔并存储到两个变量中然后显示它。但我没有理解如何对其进行标记,然后将其存储在两个不同的变量中,然后将其用于进一步的目的。

以下脚本在逐行读取文件时工作正常但我需要帮助实现拆分字符串的逻辑。

"属性文件"

FNAME=John
LNAME=Lock
DOB=01111989

脚本

#!/bin/bash
echo "FileReading Starts"
while read line
do 
    value=$line
    echo $value
    #Tokenize Logic
    property=sample
    property_value=sample
    echo $property
    echo $property_value
done <testprop.properties

echo "Finish"

3 个答案:

答案 0 :(得分:17)

试试这个:

#!/bin/bash

while IFS='=' read -r col1 col2
do 
    echo "$col1"
    echo "$col2"
done <testprop.properties

IFS是输入归档分隔符。

但是,您可以直接获取文件并访问变量,而不是解析文件(如fedorqui所述):

source testprop.properties
echo "$FNAME"

来自$ LANG=C help source

source: source filename [arguments]
Execute commands from a file in the current shell.

Read and execute commands from FILENAME in the current shell.  The
entries in $PATH are used to find the directory containing FILENAME.
If any ARGUMENTS are supplied, they become the positional parameters
when FILENAME is executed.

Exit Status:
Returns the status of the last command executed in FILENAME; fails if
FILENAME cannot be read.

最后但并非最不重要的是,使用更多报价!请参阅http://mywiki.wooledge.org/Quoteshttp://mywiki.wooledge.org/Argumentshttp://wiki.bash-hackers.org/syntax/words

答案 1 :(得分:5)

IFS可用于将字段分隔符值设置为read

实施例

while IFS="=" read line val
do 
   echo $line : $val; 
done < inputFile 

输出为

FNAME : John
LNAME : Lock
DOB : 01111989

内部变量

$IFS
    internal field separator
    This variable determines how Bash recognizes fields, or word boundaries, when it interprets character strings.

答案 2 :(得分:0)

如果可以在答案文件中分离(发送sql查询),我就会徘徊

当前的file.sql有 选择 ....... 选择 ....... 选择.......

如果文件只有一个查询

脚本就像声明那样进入文件并正常工作

声明-a query = $(cat“file.sql”)

对于“$ {query [@]}”中的Q,

;做 .....某事 完成

现在它现在是一次发送所有选择行而不是一次发送