혹시 다른 글에서도 질문이 올라오셨는데 못찾아서 죄송합니다. 중첩된 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
(문자인 경우)를 대문자로 강제하여 응답 확인을 단순화합니다.