쉘 스크립트의 중첩 된 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 

댓글

  • 음 … 이건 무슨 셸인가요? sh 유형 셸은 ' 블록에 { ... }를 사용하지 않습니다.
  • 저는 그것의 bash를 믿습니다. 프로그램은 단지 하나의 if 문으로 잘 작동했습니다. ' {...}가 문제라고 생각하지 않습니다. 중첩 된 if
  • 를 구현하는 방식에 문제가있을 것입니다.

  • 이제 마지막 성명
  • @Kusalananda, 음, 명령 그룹화에 사용할 수 있습니다 …
  • @Ptheguy if "${string3}" = 'Y'string3의 내용을 명령 이름으로 가져와 두 개의 인수 =

답변

빠른 다시 보다 일반적인 구문으로 작성 :

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의 첫 번째 문자를 대문자로 강제 적용하여 응답 확인을 단순화합니다.

댓글

  • 두 가지가 있습니다. 하나는 y를 입력하면 종료되고 입력 한 내용에 관계없이 다음 오류 ./test/sh: line19: [[variable: command not found
  • 스크립트의 첫 번째 줄이 iv id = “가 아닌 #!/bin/bash인지 확인합니다. aafe7266f7 “>

. [[ [...] ]] 구문은 bash ism입니다.

  • 예, 헤더가 정확합니다.
  • 그리고 [["${string3^}" 사이에 공백이 있습니까?
  • 그게 다였습니다! 다시 한 번 감사합니다. 시간이 있다면 [[의 의미와 공간이 왜 그렇게 중요 할 수 있는지 알려주시겠습니까?
  • 답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다