일부 문자열을 읽어야 하는 작은 스크립트를 작성 중입니다.
#!/bin/bash
echo "Enter SUID: "
read $uid
echo "Enter Tag Number: "
read $dicomTag
dicomDump() {
arg1=$1
cd ~/export/"$1"
dcmdump *.dcm > dcmResults.txt
}
tagFinder() {
arg1=$1
arg2=$2
for i in $(cat ~/export/"$1"/dcmResults.txt); do grep "$2" | >> tagResults.txt
break
done;
}
dicomDump "$uid"
#tagFinder "$uid" "$dicomTag"
가장 먼저 눈에 띄는 점은 dicomDump() 함수에서는 디렉터리를 변경하지 않는다는 것입니다. ls
코드가 아직 남아 있는 동안 코드 에 접근했을 때 제가 알아차린 또 다른 점 pwd
은 dcmdump(내 서버의 프로그램에 대한 심볼릭 링크, 여기서 *는 와일드카드)를 사용하려고 한다는 것입니다. 스크립트를 실행할 때마다 다음을 얻습니다.
E: dcmdump: No such file or directory: reading file: *.dcm
스크립트가 디렉터리를 원래대로 변경하지 않는 이유와 dcmdump 프로그램을 실행하도록 하는 방법을 알려주실 수 있는 사람이 있습니까?
답변1
당신은 read
그것을 잘못 사용했습니다.
echo "Enter SUID: "
read $uid
echo "Enter Tag Number: "
read $dicomTag
~해야 한다
echo "Enter SUID: "
read uid
echo "Enter Tag Number: "
read dicomTag
실제로 read
변수 "uid"를 빈 문자열로 확장하는 "$uid" 인수를 사용하여 호출한 다음(아직 설정되지 않았기 때문에) 쉘은 해당 단어를 인수 목록에서 read
그대로 제거합니다. 비어 있고 인용되지 않았습니다. 이로 인해 read
변수 이름을 지정하지 않고 대신 응답을 저장하지 않고 양식을 호출하게 됩니다 $REPLY
.