2011-02-25 3 views
0

Unix 스크립트를 처음 사용하는 경우입니다. 변수 1에 파일 1의 내용을 설정해야합니다. 파일 1에서 생성 된 변수는 특정 줄 번호의 파일 2에 붙여 넣기/복사해야합니다.파일의 내용을 여러 변수로 설정

파일 1 (입력) 내용 : 내용 grep/awk를 사용하여 다른 텍스트 파일에서 필요한 단어를 추출했습니다. 추출한 내용을 $ {CMD}에서 두 번째 파일에 사용될 별도의 변수로 변환하는 데 도움이 필요합니다. 가능하면

userid:Name 
pwd:Passwd 
study_id:test 
isid:testid 
....... 
....... 

(참고 : 입력 파일의 내용은 일정-I 언제든지이 5 변수를 가질 수 없습니다 파일 2 (출력) :. 파일이이 포스트를 생성하는 데 사용되는 템플릿입니다 설치 파일은 제품 패키지를 만들 수 있습니다. 나는/병합 $ {CMD} 라인에 새로 생성 된 변수를 붙여 넣어야합니다.

CMD="$FIX_HOME/shell.ksh" 

print "================= Start ${CMD}================" 

${CMD} <Variables are set at this line> 

Print "Exit form ${CMD} <$?>" 

답변

0

이미 파일 하나를 생성하기 때문에, 당신은 당신이 만드는 형식을 수정할 수 있습니다 필요한 변수를 다음 형식으로 작성하십시오.

userID="Name Surname" 
pwd=Passwd 
study_id=test 
isid=testid 

그런 다음 dot 명령 (Bourne 쉘, Korn 쉘, Bash) 또는 소스 (C 쉘, Bash 다시)를 사용하여 스크립트로 읽을 수 있습니다. 공백을 포함하는 값을 따옴표로 묶어 사용하십시오. 작은 따옴표를 사용할 수도 있지만 "Martin O'Rourke"를 다루는 것이 더 어렵습니다. 데이터 소스를 신뢰할 수 없다면 안전하기 전에 많은 정리 작업이 필요합니다.

그런 다음 변수가 행의 ${CMD}에 전달되는 방법을 지정해야합니다. 다른 까다로운 항목은 어떤 변수가 설정 되었는지를 아는 것입니다. 왜냐하면 아마도 그 변수 만 전달하고 가능한 모든 변수는 전달하지 않기를 원하기 때문입니다. 그리고 논쟁의 공간은 분명히 사물을 복잡하게 만듭니다.

배시 4.x (3.x는 충분하지 않음)가있는 경우 연관 배열을 사용할 수 있습니다. - 인수 있습니다

name="Martin O'Rourke" 
id=21131 
testid=P/23/41 
isis=N23-45112 

al 그의 출력이 같이 있었다 인수 한 줄에 하나씩, 메아리 프로그램입니다 CMD=al로 실행하면 데이터 파일을 감안할 때

CMD="$FIX_HOME/shell.ksh" 
declare -A array 
. file1       # Set variable values 
for name in $(sed 's/=.*//' file1) # Get variable names 
do 
    x=$(eval echo "\$$name") 
    array[$name]="-$name=$x" 
done 

echo "================= Start ${CMD} ================" 

${CMD} "${array[@]}" 

echo "================= Exit from ${CMD} <$?> =================" 

당신이 배쉬의 이전 버전이있는 경우

$ bash-4.1 test.script 
================= Start al ================ 
-name=name 
-isis=N23-45112 
-id=21131 
-testid=P/23/41 
================= Exit from al <0> ================= 
$ 

, 당신은 인덱스 배열, 힘의 시간을 사용해야합니다 : 사용자가 입력 한 순서에없는 커맨드 라인에서 요소의 순서에 따른 이점이 결정적 일 것입니다. 단점은 고유 색인을 생성해야한다는 것입니다.

그러나 이것은 과격하게 복잡 할 수 있습니다.

CMD="$FIX_HOME/shell.ksh" 

echo "================= Start ${CMD} ================" 

${CMD} $(<file1) 

echo "================= Exit from ${CMD} <$?> =================" 

또는, 옵션 이름 앞에 대시를 원하는 경우 :

CMD="$FIX_HOME/shell.ksh" 

echo "================= Start ${CMD} ================" 

${CMD} $(sed 's/^/-/' file1) 

echo "================= Exit from ${CMD} <$?> =================" 

이이 일을 할 수있는 다른 방법이 있지만, 당신이 진짜로보고 싶어에 따라 달라집니다 ${CMD}의 인수 목록

+0

고마워요. 조나단 - 1 단계에서 제안한 바가 있소.내가 사용하고있는 버전이 연관 배열 또는 색인 배열을 처리 할 것인지 확실하지 않은 Korn 셸을 사용하고 있습니다. 배열을 사용할 생각 이었지만 자신감이 부족했습니다. 당신이 제공 한 샘플을 고맙게 생각합니다. – Ayla

+0

ksh 쉘을 사용 중입니다. CMD 라인에서 요소의 순서가 중요하기 때문에 고유 인덱스를 생성해야합니다. 다음을 만들었습니다 – Ayla

+0

ksh 셸을 사용하고 있습니다 : CMD 줄에서 요소의 순서가 중요하기 때문에 고유 인덱스를 생성해야합니다. $ (고양이 myfile)에 단어 목록을 만들려면 > 단어 목록 [$ I] = $ word > I = $ ((I +1)) > 완료 질문 : 다음 단어를 추가해야합니까? 동일한 변수에 모든 변수를 배치하는 명령을 설정 하시겠습니까? – Ayla

관련 문제