키보드 입력과 다중 선택
대화식 모드
사용자로 부터 입력을 받아서 결과를 실행 하는 것
스크립트를 사용자와 대화식 모드로 실행할 수 있도록 쉘에서 키보드를
통한 변수값을 입력받는 방법에 대해 알아보자 !
그리고, if문에 이어 case문을 이용한 선택문 작성방법에 대해서도 알아보자 !
read 명령어는 키보드로부터 변수값을 입력받기 위해 사용하는 명령어이다.
read 명령어 사용 형식은 다음과 같다.
read 명령어 다음에 입력값을 할당할 변수(variable)를 지정하지 않으면
미리 정의된 쉘 변수 REPLY에 변수 값이 담긴다.
변수는 3개인데 입력 값이 2개 일 경우 -> 마지막 변수에는 null 값
변수는 3개인데 입력값이 4개일 경우 -> 마지막 변수가 싹 다 가져간다.
다음은 read 명령어의 옵션에 대해 알아보자.
아래는 read 명령어에서 주로 사용하는 옵션에 대한 설명이다.
// prompt 명령어란 echo로 실행하는 명령줄
다음은 read 명령어에 –t 옵션을 사용하여 사용자가 입력을 일정 시간(초)동안 하지않으
면 read 명령어가 자동으로 종료되는 예 이다.
read 명령어가 입력 시간 초과로 종료되면 실패 코드값(0이 아닌 상수값)을 반환한다.
키보드로 입력을 받지않고, 리다이렉션을 이용해서 파일을 입력 받는 방식 처럼, 문자열을 입력 받아보자!
here 문자열이란 <<< 연산자 다음에 표시하는 문자열을 의미한다. here 문자열을 사용하면
read 명령어를 통한 입력 시 표준 입력(키보드 입력)이 아니라 here 문자열로 부터 입력 값을 받는다.
다음은 read 명령어에 here 문자열을 사용한 예이다.
here 문자열에는 문자열 상수 뿐만아니라
변수 확장, 명령어 치환 등 문자열로 변환되는 표현식은 모두 올 수 있다.
변수에 문자열을 담아놓고 , 변수(문자열이 담긴)를 담는 것도 가능하다.
이런식으로 명령어 치환 (값은 문자열로 나오니까)도 담을 수 있다
보통은 ' ' 공백 (빈칸 하나)가 기본 구분자이다 (문자열 토큰 구분자) // = ISF
IFS(Internal Field Separator, 입력 필드 구분자)란
문자열 토큰 분리에 사용되는 구분자로 쉘에서 자동 할당 되는 쉘 변수이다.
IFS의 기본 값은 스페이스, 탭, 개행 문자를 포함하고 있지만,
read 명령어에서 사용자 입력 토큰 구분자를 변경하려면 IFS를 다른 문자열로 변경하면 된다.
uptime -> 호스트네임 및 알려준다.
df .. ^^;
du 디스트 유틸어쩌구 보여줌..
명령어들은 중요하지 않다. 그런게 있다.. 정도 관심 있으면 알아봅시다~
위 내용은 메뉴를 출력하고 사용자로부터 메뉴 번호를 입력받아 실행하는 예이다.
실행결과는 자습시간에~
실행 흐름 제어에 사용되는 선택문에는 이중 선택문(if문)과 다중 선택문(case문)있다.
여기에서는 다중 선택문인 case문에 대해 알아보자.
case문은 변수 값을 확인하고 그 값과 일치하는 패턴을 찾는다. 패턴은 쉘의 경로명 확
장에서 사용되는 패턴과 형식이 동일하다. 변수 값과 일치하는 패턴이 있으면 해당 패턴
의 명령들을 실행한다. 일치하는 패턴을 찾은 후에는 더 이상 패턴을 찾지 않고 case문을 벗어난다.
// case문에서 ;; -> break 역할
와일드카드인 별표 '*' 기호는
모든 변수값과 일치하는 패턴으로 case문의 마지막 패턴으로 사용된다.
시험내기 딱 좋다 ! 패턴을 만족하냐 안하냐 구분 할 수 있게끔 (できるようにしよう ^ ^)
이번 파일은 위의 read 명령어 실습했던 파일과 내용이 비슷하다.
리다이렉션을 통해 cat > case3.sh read2.sh 이렇게 파일을 복사해서 수월하게 작성하자!
case문의 패턴 형식으로 패턴 사이에 수직 바 (|) 를 사용하여 여러 패턴들을 OR 조건으로
연결하는 패턴 결합도 가능하다.
패턴 결합은 대문자와 소문자 모두를 제어할 때 편리하 다.
추가로 차량번호를 입력받아서.
주차 가능한 날짜를 출력받는 프로그램을 다중 선택문으로 짜 보자.