フォルダ内の複数のファイルを反復処理して値を割り当てる

フォルダ内の複数のファイルを反復処理して値を割り当てる

という名前のフォルダがありMyProperties、その中に、、など.propertiesの複数のファイルが含まれています。各ファイルには次のような内容が含まれています:1.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上記のとおり)。含まれていない場合、ファイルは現在のディレクトリではなく のディレクトリで検索されます$PATH( の場合、bashおよび が POSIX 準拠モードでない場合、 で見つからない場合、 は現在の作業ディレクトリで. file検索します)。file$PATH

関連情報