从文件中阅读时在shell脚本中拆分字符串

js5cn81o  于 2023-10-23  发布在  Shell
关注(0)|答案(3)|浏览(159)

我有一个下面的脚本,它应该从一个“.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"
qxgroojn

qxgroojn1#

试试这个:

#!/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/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

q43xntqr

q43xntqr2#

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.
mkshixfv

mkshixfv3#

我想知道是否有可能在应答文件本身(发送SQL查询)中分离
当前file.sql已选择.......选择.......选择.......
和脚本进入文件一样声明和工作正常,如果文件只有一个查询
declare -a query=$(cat“file.sql”)

对于“${query[@]}"中的Q;做某事
现在它现在是一次发送所有选择行,而不是一次发送一行

相关问题