파일을 읽고 다른 파일에 값을 할당

파일을 읽고 다른 파일에 값을 할당

쉘 스크립트를 사용하여 파일을 읽고 다른 파일의 변수에 값을 할당하고 싶습니다.

예를 들어 내 파일은 "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기호 를 등호 로 설정합니다 =. 그런 다음 라인을 읽고 라인을 두 개의 변수 varsum 으로 나눕니다 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셸 활성 문자가 포함되어 있으면 원하는 결과가 나오지 않을 수 있습니다.

관련 정보