繁体   English   中英

Shell脚本:分别读取属性文件的第一行和其余各行

[英]Shell Script: Read the first line of properties file separately form the rest of the lines

我正在编写一个外壳脚本,该脚本读取属性文件并执行一些操作。

那就是它从道具文件的第一行读取。

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

如果禁用,则将正常退出程序。 我想把这个三明治放在相同的道具文件中。 (即现在,prop文件的第一行将为ENABLED或DISABLED)

目前,我正在使用:

cat init_token.properties | while read line

现在,在此之前,我想分别读取开关的值,如果启用,则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

您可以在脚本顶部尝试以下操作:

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

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

首先,您可以使用read分隔行,因此您无需使用echo | awk 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

也许是这样的

    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}'`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM