쉘 스크립트의 중첩된 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(문자인 경우)를 대문자로 강제하여 응답 확인을 단순화합니다.

관련 정보