등 의 여러 파일이 MyProperties
포함된 폴더가 있습니다 . 각 파일에는 다음과 유사한 내용이 포함되어 있습니다..properties
1.properties
2.properties
3.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