이미 다른 게시물에서 내 문제에 대한 질문을 받았지만 찾을 수없는 경우 사과드립니다. 중첩 된 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
댓글
답변
빠른 다시 보다 일반적인 구문으로 작성 :
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^}"
사이에 공백이 있습니까? [[
의 의미와 공간이 왜 그렇게 중요 할 수 있는지 알려주시겠습니까?
sh
유형 셸은 ' 블록에{ ... }
를 사용하지 않습니다.{...}
가 문제라고 생각하지 않습니다. 중첩 된if
를 구현하는 방식에 문제가있을 것입니다.
if "${string3}" = 'Y'
는string3
의 내용을 명령 이름으로 가져와 두 개의 인수=
및…