Lendo arquivo de propriedades com Shell Script – IFS
Bom, pode parecer simples, mas quando a velocidade é o seu primeiro quesito, isso pode mudar um pouco. Mas espera aí, é apenas ler um arquivo e fazer um split pegar a chave e o valor. Simples assim mesmo, mas quando o assunto é shell script um simples split não é tão simples.
A primera forma de se fazer seria fazer com um cut, veja:
1 | echo "chave=valor" | cut -d = -f 1 |
Legal, funciona, mas quando seu arquivo de properties é grande, ou que esse script rode toda hora, a velocidade do um simples cut que funciona passa a ser um problema.
Uma outra forma de se fazer isso é usar o IFS – Internal Field Separator para fazer isso de uma forma decente.
Então, vamos lá. Pimeiro meu arquivo de propriedades:
sample.properties
1 2 | caminho=/tmp version=1.0 |
Fiz um script simples para representar o problema. Função rox com IFS e função sux com CUT.
sample.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #!/bin/bash rox(){ IFS_OLD=$IFS IFS="=" while read key value do echo "key = $key" echo "Value = $value" done < sample.properties IFS=$IFS_OLD } sux(){ while read line do key=`echo $line | cut -d = -f 1` value=`echo $line | cut -d = -f 2` echo "key = $key" echo "Value = $value" done < sample.properties } clear echo "rox--------------------------------------" time rox echo "sux--------------------------------------" time sux |
Veja o resultado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | rox-------------------------------------- key = caminho Value = /tmp key = version Value = 1.0 real 0m0.001s user 0m0.000s sys 0m0.000s sux-------------------------------------- key = caminho Value = /tmp key = version Value = 1.0 real 0m0.024s user 0m0.007s sys 0m0.019s |
Notem a velocidade do script. Não é ser xiita, mas sim fazer da forma correta.

Como você mediu a velocidade de execução do script?
O comando time no proprio script mede o tempo de execução da função.