쉘 스크립트의 중첩된 If 문

쉘 스크립트의 중첩된 If 문

내 문제가 이미 다른 게시물에서 요청되었지만 아무 것도 찾을 수 없었다면 사과드립니다. 중첩된 if 문을 작성해야 하는 작은 쉘 스크립트를 작성 중입니다. 내가 제대로 하고 있는지 잘 모르겠습니다. 오류는 발생하지 않지만 프로그램이 예상대로 작동하지 않습니다. 내가 원하는 것은 파일이 이미 에 있는 경우 MasterFile.txt사용자는 y또는 말을 통해 다른 데이터 세트를 가져오거나 Y또는 말을 통해 n프로그램 N을 종료할 수 있다는 것입니다.문제: 스크립트가 종료되지 않습니다.. 파일이 에 없으면 MasterFile.txt데이터 세트를 가져옵니다. 코드는 다음과 같습니다.

if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt;
then {
   echo "dicounter_${string1}_from_${string2} already exists in the MasterFile. Would you like to proceed?"
   read string3
   if "${string3}" = 'Y' || "${string3}" = 'y'; then {
      screen -S trans -L /dev/ttyACM0
      screen -S trans -X stuff 's'$(echo -ne '\015')
      sleep 8s
      screen -S trans -X quit
   }
   else{return}
   fi
else{
#opening screen & begin analysis
screen -S trans -L /dev/ttyACM0
screen -S trans -X stuff 's'$(echo -ne '\015')
sleep 8s
screen -S trans -X quit
}
fi

답변1

보다 일반적인 구문으로 빠르게 다시 작성합니다.

if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then 
   echo "dicounter_${string1}_from_${string2} already exists in the MasterFile. Would you like to proceed?"
   read string3
   if [[ "${string3^}" == 'Y' ]]; then
      screen -S trans -L /dev/ttyACM0
      screen -S trans -X stuff 's'$(echo -ne '\015')
      sleep 8s
      screen -S trans -X quit
   else
       exit 0
   fi
else
    #opening screen & begin analysis
    screen -S trans -L /dev/ttyACM0
    screen -S trans -X stuff 's'$(echo -ne '\015')
    sleep 8s
    screen -S trans -X quit
fi

여기에 선언된 함수가 없는 것 같으므로 return이 사용 사례에는 유효하지 않습니다. 귀하의 질문에 긍정적이지 않은 대답을 하면 전체 스크립트가 중단되므로 exit.

이 구성은 문자인 경우 ${variable^}의 첫 번째 문자를 강제로 $variable대문자로 지정하여 응답 확인을 단순화합니다.

관련 정보