0

プロパティファイルを読み取り、いくつかの操作を実行するシェルスクリプトを書いています。

つまり、propファイルの最初の行から読み取ります。

このスクリプトに、ENABLEDがスクリプトを実行し、通常の操作を実行するスイッチを追加します。

DISABLEDの場合、プログラムは正常に終了します。このスイッチを同じプロップファイルに入れたいです。(つまり、propファイルの最初の行がENABLEDまたはDISABLEDになります)

現在使用しているもの:

cat init_token.properties | while read line

この前に、スイッチの値を個別に読み取りたいと思います。ENABLEDの場合、while読み取り行はプロパティファイルの2行目から開始する必要があります。一言で言えば、私は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

次に、ENABLED / DISABLED/otherのチェックを行います。

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

もう1つのポイント:バックグラウンドに置かない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 に答える