0

我正在编写一个读取属性文件并执行某些操作的 shell 脚本。

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

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

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

目前我正在使用:

cat init_token.properties | while read line

现在在此之前,我想单独读取开关的值,然后如果启用,while read 行应该从属性文件的第二行开始。简而言之,我想将 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
4

3 回答 3

2

您可以在脚本顶部尝试这样的操作:

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

if [ "$CHECK" == "DISABLED" ]; then
     exit 0
fi
于 2012-10-25T17:40:10.487 回答
2

首先你可以用 分割线read,所以你不需要使用echo | awk

cat init_token.properties | while read filename attribute value
do

接下来是启用/禁用/其他的检查:

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

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

dos2unix init_token.properties
于 2012-10-25T17:46:29.410 回答
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}'`
于 2012-10-25T17:48:12.147 回答