본문 바로가기

스터디/리눅스 커맨드라인

[리눅스] 30. 문제 해결

 

스크립트들을 좀 더 복잡하게 만들어, 실수를 했을 때나 프로그램이 원치 않는 동작을 할때 무슨 일이 벌어지는지 확인해야 하는데 이러한 오류들과 문제를 찾는 방법들이 몇몇 존재한다.

 

 

1. 구문 오류

일반적인 오류 분류 중 하나는 구문적인 것이다.
구문 오류에는 쉘 구문 요소의 잘못된 타이핑을 포함한다. 대부분 이러한 오류는 스크립트를 실행하는 경우 쉘에 혼란을 일으킬 수 있다.

(1) 따옴표 누락
스크립트에서 따옴표를 제거하면 두 가지의 오류가 발생한다.
하나는 프로그램에서 따옴표가 누락된 곳이 아닌 그 이후의 행 번호를 보고한다. bash는 나머지 마침 따옴표를 찾을 때까지 계속 다음 따옴표를 찾게된다.
마지막은 그 다음 마침 따옴표를 다른 행에서 찾게 되면 bash는 혼란스러워하고, 문법이 깨져버린다. (문법 에러)

(2) 예상치 못한 토큰이나 토큰 누락
만약 if문에서 세미콜론을 제거했다면, then은 인자 목록에 추가가 되버린다. 이는 문법적으로 유효하다. 그 다음 echo 명령어도 유효하다. 하지만 else는 쉘이 명령어 이름이 아닌 예약어로 인식하기 때문에 적합하지 않다.

 

 

2. 논리 오류

논이 오류는 실행 중에 스크립트를 막지는 않는다. 정상적으로 실행되지만 논리적인 문제 때문에 원하는 결과를 얻을 수 없을 것이다.

예를 들어, 
(1) 잘못된 조건식 : if/then/else 문은 잘못된 로직을 수행하는 부정확한 코드를 만들기 쉽다.
(2) "Off by one" 오류들 : 카운터를 사용하여 루프를 코딩할 때, 올바른 지점에서 카운트가 종료되기 위해서 1이 아닌 0부터 루프가 시작한다는 것을 간과하는 경우가 있다.