Shell脚本:与其余行分开读取属性文件的第一行

时间:2012-10-25 17:36:11

标签: linux shell

我正在编写一个shell脚本来读取属性文件& perfroms一些操作。

就是它从prop文件的第一行读取。

现在在这个脚本中我想添加一个开关,如果ENABLED将执行脚本并执行常规操作。

如果DISABLED将以正常方式退出程序。 我想把这个swich放在同一个prop文件中。 (即现在prop文件的第一行将是ENABLED或DISABLED)

目前我正在使用:

cat init_token.properties | while read line

在此之前,我想分别阅读开关和放大器的值。然后,如果ENABLED,while读取行应从属性文件的第二行开始。 简而言之,我想要分割Ist线的读数,然后是其余部分。

init_token.properties格式:

ENABLED
abc.dat IP  120.210.60.1
xyz.dat PORT    8200
pqr.dat IP  420.24012.4

脚本:

#!/bin/ksh

dos2unix init_token.properties &

# PATH for DAT files
DAT_FILE_PATH='.'

cat init_token.properties | while read line
do
        #       PARAMETER EXAMPLE - <FILENAME> <ATTRIBUTE> <VALUE>
        #       read FILENAME
        FILENAME=`echo "$line" | awk -F " " '{print $1}'`
        #       read ATTRIBUTE
        ATTRIBUTE=`echo "$line" | awk -F " " '{print $2}'`
        #       read VALUE
        VALUE=`echo "$line" | awk -F " " '{print $3}'`
        #       setting fully qualified filepath name & temporary file
        FULLPATH=$DAT_FILE_PATH"/"$FILENAME
        TEMP_FILE=tempfile
        old='$('$FILENAME'_'$ATTRIBUTE')'
        #       replace $(<FILEANME>_<ATTRIBUTE>) with VALUE if file exists
        if [ -e $FULLPATH ]
        then
                sed 's/'$old'/'$VALUE'/g' $FULLPATH > $TEMP_FILE && mv $TEMP_FILE $FULLPATH
        else
                echo 'File '$FULLPATH' does not exists while replacing token '$old
        fi
done
exit

3 个答案:

答案 0 :(得分:2)

你可以在脚本的顶部尝试这样的事情:

CHECK=$(head -n 1 prop.file)

if [ "$CHECK" == "DISABLED" ]; then
     exit 0
fi

答案 1 :(得分:2)

首先,您可以使用read拆分该行,因此您无需使用echo | awk

cat init_token.properties | while read filename attribute value
do

接下来检查ENABLED / DISABLED / other:

    case "$filename" in
    ENABLED) ;;
    DISABLED) exit ;;
    *)
        # It's another line, do processing
        ...
        ;;
    esac
done

另一点:不要将dos2unix ...放在后台。它可能比脚本运行的时间更长。只需在没有&的情况下调用它:

dos2unix init_token.properties

答案 2 :(得分:2)

或许是这样的事情?

    let CNTR=0

    cat init_token.properties | while read line
    do
            let CNTR=CNTR+1

            if [ $X == 1 ]; then
                 //is first line
            else
                 //is not first line
            fi

            #       PARAMETER EXAMPLE - <FILENAME> <ATTRIBUTE> <VALUE>
            #       read FILENAME
            FILENAME=`echo "$line" | awk -F " " '{print $1}'`