Você pode usar sed
para substituir valores em arquivos:
#!/bin/bash
new_value=5
for f_name in MyProperties/*.properties; do
sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done
Eu tenho uma pasta chamada MyProperties
e ela contém vários arquivos .properties
como 1.properties
, 2.properties
, 3.properties
e assim por diante. Cada arquivo contém algo como:
keyname=value
O que devo escrever aqui como o valor no arquivo de propriedades para que seja atribuído ou substituído? Como eu faço uma iteração em um script bash e atribuo o valor à chave?
pseudocódigo:
#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname
Você pode usar sed
para substituir valores em arquivos:
#!/bin/bash
new_value=5
for f_name in MyProperties/*.properties; do
sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done
Se você realmente tiver vários arquivos com varName=value
pares, tudo o que você precisa fazer é fonte . Portanto, repita todos os arquivos .properties
e forneça cada um deles:
for file in /path/to/MyProperties/*.properties; do
. "$file"
done
Agora você tem todas as variáveis definidas em seu script. Para ilustrar:
$ cat foo.properties
foo="bar"
$ echo "$foo" ## no value
$ . ./foo.properties
$ echo "$foo"
bar
Isso pressupõe que seus arquivos .properties
tenham nada além de pares variável = valor . Ao fazer o sourcing, cada linha do arquivo será executada no shell executando o script que faz o sourcing. Assim, todos os comandos em seus arquivos .properties
também serão executados. E qualquer invasor com acesso a MyProperties
pode adicionar um comando malicioso a ele. Portanto, faça isso apenas se puder ter certeza do conteúdo dos arquivos.
Observe que é importante que o caminho fornecido para o .
incorporado contenha um caractere /
(daí o ./foo.properties
acima), caso contrário, o arquivo será consultado nos diretórios de $PATH
em vez do diretório atual (no caso de bash
e quando não estiver no modo de conformidade com POSIX, . file
procurará file
no diretório de trabalho atual se ele não tiver sido encontrado em $PATH
).
Tags bash shell-script