저는 다른 프로그램에서 데이터를 가져오는 쉘 스크립트를 작성 중입니다. 해당 변수 값을 사용하여 파일의 내용을 읽고 일부 내용을 이 데이터의 시작과 하단에 추가합니다.
아래는 예입니다:
readonly file_location=$location
readonly client_id = $id
readonly client_types = $type_of_client
여기서 $location, $id 및 $type_of_client 값은 다른 프로그램에서 전달됩니다. 아래는 예입니다:
- $location은 다음과 같은 전체 경로 이름이 됩니다.
/home/david/data/12345678
- $id는 숫자입니다:
120
- $type_of_client는 공백으로 구분된 단어입니다.
abc def pqr
이제 이 위치에는 , 및 /home/david/data/12345678
와 같은 파일이 있습니다 . 의미는 항상 동일하므로 하드코딩할 수 있습니다. 이제 위에 표시된 대로 변수를 반복 하고 파일 이름을 만든 다음 전체 파일을 문자열로 읽어야 합니다(또는 다른 더 나은 방법이 있는 경우 그럴 수도 있음). 내 직업은 다음과 같습니다.abc_lop.xml
def_lop.xml
pqr_lop.xml
_lop.xml
client_types
#!/bin/bash
readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client
for word in $client_types
do
echo $word
file_value=`cat "file_location"/"$word"_lop.xml`
echo $file_value
done
이제 쉘 스크립트에서 문자열 조작과 같은 특별한 작업을 수행해야 하는데 어떻게 해야 할지 모르겠습니다. 이제 우리가 읽고 있는 모든 파일의 상단과 하단에 무언가를 추가해야 합니다. 이 파일에서 읽은 값에 관계없이 말이죠. 다음과 같이 똑같은 작업을 수행해야 합니다.
예: abc_lop.xml
다음 명령을 사용하여 파일을 보면 다음과 같습니다 vi
.
<Hello version="100">
<!-- some stuff here -->
</Hello>
다음과 같이 만들어야 합니다.
<hello_function>
<name>Data</name>
<Hello version="100">
<!-- some stuff here -->
</Hello>
</hello_function>
보시다시피 상단에 추가 <hello_function><name>Data</name>
하고 하단에 추가했습니다 </hello_function>
. 쉘 스크립트에서 이것을 어떻게 할 수 있나요?
따라서 일반적으로 echo $file_value
위의 각 추가 값은 인쇄되어야 합니다 client_types
.
#!/bin/bash
readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client
for word in $client_types
do
echo $word
file_value=`cat "file_location"/"$word"_lop.xml`
// may be do something here?
echo $file_value // this should print out appended string value both at top and bottom.
done
각 XML 파일은 확실히 10MB보다 작습니다.
답변1
수행 중인 작업이 데이터 출력뿐이라면 변수를 읽을 필요가 없습니다. 메인 루프의 경우:
for word in $client_types; do
echo "$word"
echo '<hello_function>'
echo '<name>Data</name>'
cat "$file_location/${word}_lop.xml"
echo '</hello_function>'
done
물론 이렇게 하면 수정된 모든 파일이 연결되어 나중에 분리하기 어려울 수 있습니다. 하지만 작동합니다.
편집: 별도의 파일로 출력하려면 다음을 수행하십시오.
for word in $client_types; do
fn="${word}"_new.xml
echo "$word"
echo '<hello_function>' >>"$fn"
echo '<name>Data</name>' >>"$fn"
cat "$file_location/${word}_lop.xml" >>"$fn"
echo '</hello_function>' >>"$fn"
done
물론 각 파일에 무엇을 포함시키려는지에 따라 다릅니다.