/ / Shell Script: Leia a primeira linha do arquivo de propriedades separadamente do resto das linhas - linux, shell

Shell Script: Leia a primeira linha do arquivo de propriedades separadamente do resto das linhas - linux, shell

Estou escrevendo um script de shell que lê um arquivo de propriedades e executa alguma operação.

Isto é, ele lê a primeira linha do arquivo prop.

Agora, neste script, quero adicionar uma opção que, se ENABLED, executará o script e executará a operação normal.

Se DESATIVADO sairá do programa normalmente. Eu quero colocar este swich no mesmo arquivo prop. (ou seja, agora a primeira linha do arquivo prop estará ATIVADA ou DESATIVADA)

Atualmente estou usando:

cat init_token.properties | while read line

Agora, antes disso, eu quero ler separadamente o valor do switch e, se HABILITADO, a linha de leitura while deve começar a formar o segunda linha do arquivo de propriedades. Em resumo, quero segregar a leitura da primeira linha e depois o resto.

Formato de init_token.properties:

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

Roteiro:

#!/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

Respostas:

2 para resposta № 1

algo assim, talvez?

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

2 para resposta № 2

Você pode tentar algo assim no início do seu script:

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

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

2 para resposta № 3

Primeiro você pode dividir a linha com read, então você não precisa usar echo | awk:

cat init_token.properties | while read filename attribute value
do

A seguir estão as verificações para ATIVADO / DESATIVADO / outro:

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

Outro ponto: não coloque dos2unix ... no fundo. Ele pode ser executado por mais tempo do que o seu script. Basta ligar sem &:

dos2unix init_token.properties