쉘 스크립트를 사용하여 파일을 읽고 다른 파일의 변수에 값을 할당하고 싶습니다.
예를 들어 내 파일은 "myconf"입니다.
cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh"
user="rhqadmin"
passwd="janre"
file1="/opt/Solartis_Monitoring/JON_CLI/samples/agentresourceid.js"
file2="/opt/Solartis_Monitoring/JON_CLI/samples/agentresourceid"
file3="/opt/Solartis_Monitoring/JON_CLI/samples/alertresourceid.js"
file4="/opt/Solartis_Monitoring/JON_CLI/samples/alertresourceid"
file5="/opt/Solartis_Monitoring/JON_CLI/samples/alertid"
내 스크립트는 "testconf"라는 다른 파일에 있습니다.
$cli -u $user -p $passwd -s $host -f $file3 > $file4
"myconf" 파일에서 변수(cli, user 등)의 값을 가져오고 싶습니다. while 루프를 사용하여 전체 라인( cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh"
)을 $cli에 할당하는 값을 읽습니다. 내 변수에 필드 구분 기호(=) 뒤의 값을 할당하면 됩니다.
예:
echo $cli
/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh
다음과 같이 인쇄하면 안 됩니다 .cli="/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh"
"myconf" 파일은 변경할 수 없습니다. 이는 미리 정의된 파일입니다. 이 문제를 해결하도록 도와주세요
답변1
신중한 접근
노력하다:
while IFS== read -r var value
do
value="${value#\"}"
[ "$var" ] && declare "$var=${value%\"}"
done <myconf
echo "$cli"
그러면 다음과 같은 출력이 생성됩니다.
/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh
어떻게 작동하나요?
while IFS== read -r var value; do
그러면 사이클이 시작됩니다. 일시적으로 필드 구분
IFS
기호 를 등호 로 설정합니다=
. 그런 다음 라인을 읽고 라인을 두 개의 변수var
sum 으로 나눕니다value
.var
첫 번째 이전의 항목에 할당되고=
첫value
번째 이후의 항목을 가져옵니다=
.value="${value#\"}"
"
이렇게 하면 값에서 선행이 제거됩니다.[ "$var" ] && declare "$var=${value%\"}"
비어 있지 않은 경우
var
, 즉 빈 줄을 읽지 않은 경우$var
후행이 제거된 값이 변수에 할당됩니다.${value%\"}"
${value%\"}"
"
$value
done <myconf
이는 루프의 끝을 알리고 파일에서 루프 입력을 설정합니다
myconf
.
신뢰 방법
이 소스 파일은 다음 myconf
과 같습니다.
. myconf
echo "$cli"
그러면 다음과 같은 출력이 생성됩니다.
/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh
이 방법은 파일을 실행하기 때문에 myconf
작성자를 신뢰해야 합니다 myconf
. 파일에 myconf
셸 활성 문자가 포함되어 있으면 원하는 결과가 나오지 않을 수 있습니다.