
내 문제가 이미 다른 게시물에서 요청되었지만 아무 것도 찾을 수 없었다면 사과드립니다. 중첩된 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
대문자로 지정하여 응답 확인을 단순화합니다.