フォルダ内の複数のファイルを繰り返し、値を割り当てます。

フォルダ内の複数のファイルを繰り返し、値を割り当てます。

などの複数のファイルをMyProperties含むフォルダがあります。各ファイルには、次のような内容が含まれています。.properties1.properties2.properties3.properties

keyname=value 

割り当てまたは置換できるように、プロパティファイルの値としてここに何を書く必要がありますか?これをどのように繰り返し、bashスクリプトのキーに値を割り当てることができますか?

擬似コード:

#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname

答え1

sed以下を使用してファイルの値を変更できます。

#!/bin/bash

new_value=5
for f_name in MyProperties/*.properties; do
     sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done

答え2

ペアリングされたファイルが複数ある場合は、varName=value次のことが必要です。源泉それ。したがって、すべての.propertiesファイルを繰り返し、各ファイルのソースコードを取得します。

for file in /path/to/MyProperties/*.properties; do
    . "$file"
done

これでスクリプトにすべての変数が定義されました。表示するには:

$ cat foo.properties 
foo="bar"
$ echo "$foo"  ## no value

$ . ./foo.properties 
$ echo "$foo"
bar

これはあなたの.propertiesファイルに次のものがあると仮定します。変数=値のペア以外にはなし。購入が行われると、ファイルの各行は購入スクリプトを実行するシェルで実行されます。したがって、ファイル内のすべてのコマンド.propertiesも実行されます。アクセス権を持つすべての攻撃者はMyPropertiesここに悪意のあるコマンドを追加する可能性があります。したがって、ファイルの内容を確認できる場合にのみこれを実行してください。

与えられた組み込みパスに文字が.含まれていることが重要です/(したがって、./foo.properties上記の内容)。それ以外の場合、ファイルは現在のディレクトリ(POSIX互換モードおよびPOSIX互換モードではない場合)では$PATHないディレクトリから検索されます。 )に見つからないbash場合は、現在の作業ディレクトリから. file検索されます。file$PATH

関連情報