Network/Linux

키보드 입력과 다중 선택

Jineer 2019. 6. 12. 13:34

대화식 모드 

사용자로 부터 입력을 받아서 결과를 실행 하는 것

 

스크립트를 사용자와 대화식 모드로 실행할 수 있도록 쉘에서 키보드를
통한 변수값을 입력받는 방법에 대해 알아보자 !

그리고, if문에 이어 case문을 이용한 선택문 작성방법에 대해서도 알아보자 !

 

read 명령어는 키보드로부터 변수값을 입력받기 위해 사용하는 명령어이다. 

read 명령어 사용 형식은 다음과 같다.

read 명령어 다음에 입력값을 할당할 변수(variable)를 지정하지 않으면 

미리 정의된 쉘 변수 REPLY에 변수 값이 담긴다.

 

입력 값이 하나 일 경우
입력 값이 여러개 일 경우

변수는 3개인데 입력 값이 2개 일 경우 -> 마지막 변수에는 null 값

변수는 3개인데 입력값이 4개일 경우  -> 마지막 변수가 싹 다 가져간다.

 

 

 

다음은 read 명령어의 옵션에 대해 알아보자. 

아래는 read 명령어에서 주로 사용하는 옵션에 대한 설명이다.

// prompt 명령어란 echo로 실행하는 명령줄

 

read 명령어에서 –p 옵션을 사용하여 입력 프롬프트를 출력한 예
read 명령어에 –s 옵션을 사용하여 화면에 출력되지 않는 문자열을 입력받는 예 

다음은 read 명령어에 –t 옵션을 사용하여 사용자가 입력을 일정 시간(초)동안 하지않으
면 read 명령어가 자동으로 종료되는 예 이다. 

read 명령어가 입력 시간 초과로 종료되면 실패 코드값(0이 아닌 상수값)을 반환한다.

 

read1.sh 작성 내용 / 10초동안 입력 안할시
read 명령어에 –t 옵션을 사용하여 사용자가 입력을 일정시간(초) 동안 하지 않을시 자동으로 종료 되는 예 

 

키보드로 입력을 받지않고, 리다이렉션을 이용해서 파일을 입력 받는 방식 처럼, 문자열을 입력 받아보자!

 

here 문자열이란 <<< 연산자 다음에 표시하는 문자열을 의미한다. here 문자열을 사용하면

 read 명령어를 통한 입력 시 표준 입력(키보드 입력)이 아니라 here 문자열로 부터 입력 값을 받는다. 

다음은 read 명령어에 here 문자열을 사용한 예이다.

here 문자열에는 문자열 상수 뿐만아니라 

변수 확장, 명령어 치환 등 문자열로 변환되는 표현식은 모두 올 수 있다.

 

변수에 문자열을 담아놓고 , 변수(문자열이 담긴)를 담는 것도 가능하다.

 

이런식으로 명령어 치환 (값은 문자열로 나오니까)도 담을 수 있다

 

 

보통은 ' ' 공백 (빈칸 하나)가 기본 구분자이다 (문자열 토큰 구분자) // = ISF

 

IFS(Internal Field Separator, 입력 필드 구분자)란

 문자열 토큰 분리에 사용되는 구분자로 쉘에서 자동 할당 되는 쉘 변수이다.

 

 IFS의 기본 값은 스페이스, 탭, 개행 문자를 포함하고 있지만,

read 명령어에서 사용자 입력 토큰 구분자를 변경하려면 IFS를 다른 문자열로 변경하면 된다. 

 

연월일 구분을 위해 점(.) 문자, 시분초 구분을 위해 콜론(:)  문자를 IFS로 사용한 예

 

 

uptime -> 호스트네임 및 알려준다.

df  .. ^^;

du 디스트 유틸어쩌구 보여줌..

명령어들은 중요하지 않다. 그런게 있다.. 정도 관심 있으면 알아봅시다~

 

위 내용은 메뉴를 출력하고 사용자로부터 메뉴 번호를 입력받아 실행하는 예이다.

 

실행결과는 자습시간에~

 

 

실행 흐름 제어에 사용되는 선택문에는 이중 선택문(if문)과 다중 선택문(case문)있다. 

 여기에서는 다중 선택문인 case문에 대해 알아보자.

 

case문은 변수 값을 확인하고 그 값과 일치하는 패턴을 찾는다. 패턴은 쉘의 경로명 확
장에서 사용되는 패턴과 형식이 동일하다. 변수 값과 일치하는 패턴이 있으면 해당 패턴
의 명령들을 실행한다. 일치하는 패턴을 찾은 후에는 더 이상 패턴을 찾지 않고 case문을 벗어난다. 

// case문에서 ;; -> break 역할

 

정수를 입력받아 해당 숫자의 영단어를 출력하는 예
실행 결과

 와일드카드인 별표 '*' 기호는 

모든 변수값과 일치하는 패턴으로 case문의 마지막 패턴으로 사용된다. 

 

 

case문에 주로 사용되는 패턴의 예

 

시험내기 딱 좋다 ! 패턴을 만족하냐 안하냐 구분 할 수 있게끔 (できるようにしよう ^ ^)

 

case문에서 다양한 패턴을 사용한 예.
위 내용의 실행 결과

 

 

 

이번 파일은 위의 read 명령어 실습했던 파일과 내용이 비슷하다.

리다이렉션을 통해 cat > case3.sh read2.sh 이렇게 파일을 복사해서 수월하게 작성하자!

 

다음은 패턴 결합을 사용하여 메뉴를 선택하는 예이다.

 

 

case문의 패턴 형식으로 패턴 사이에 수직 바 (|) 를 사용하여 여러 패턴들을 OR 조건으로
연결하는 패턴 결합도 가능하다. 

 

패턴 결합은 대문자와 소문자 모두를 제어할 때 편리하 다.

 

 

추가로 차량번호를 입력받아서. 

주차 가능한 날짜를 출력받는 프로그램을 다중 선택문으로 짜 보자.

 

차량 번호로 주차 날짜 알아보기 / 다중 선택문 실습