본문 바로가기

Linux/Shell Script

[Shell Script] 7. Input & Output

이번 포스팅에서는 따배님의 Shell Script wp 7강에 대해 정리해보겠다.

언제나 그렇듯이 영상 링크 첨부한다.

https://www.youtube.com/watch?v=jzcE4vCg1sU&list=PLApuRlvrZKog2XlvGJQh9KY8ePCvUG7Je&index=8&ab_channel=TTABAE-LEARN 

반드시 시청해보기를 바란다.

 

오늘의 목차이다:

  1. echo
  2. read
  3. printf

하나씩 살펴보자

1. echo

echo는 기본 텍스트 출력 명령어이다. 주로 쓰는 옵션으로는 두개가 있다.

echo -n: 메시지 출력후 줄바꿈을 하지 않는다.

echo -e: "\"문자를 해석하여 특별한 의미를 지정한다. (c언어 해본 사람은 알 거다.)

\n 줄바꿈, \t tab키 적용, \a 알람 발생

 

먼저 echo -n 을 보자

차이가 보이는가?

echo -n  을 하면 줄바꿈을 하지 않고 그 줄에 그대로 다음 명령을 기다린다.

하지만 그냥 echo "hello"를 하면 hello를 출력 후 자동으로 줄바꿈을 하여 다음 명령을 기다린다.

 

echo -e 는 어떻게 쓰일까?

그냥 echo로 출력하면 "hello\n linux" 출력시 문자 그대로 "hello\n linux"라고 출력한다.

그러나 echo -e를 할 시에 \n은 특정 의미를 갖게 되어서

hello

 linux

라는 형식으로 바뀌어서 출력된다.

 

사실상 echo는 허구한날 할 수 있는 명령어고 이미 많이 해봤을 것이라 생각해서 이정도만 하겠다.

 

 

2. read

read 명령어는 텍스트의 표준 입력 방법이다. 여러 옵션을 지정할 수 있다.

read -n: 지정한 문자수만큼 입력 받는다.

read -t: 지정된 시간안에 입력받는다.

read -s: 글자가 보이지 않게 입력을 받는다.

 

하나씩 살펴보기에는 역시 예시가 답인 거 같다.

저러면 사실

score=80이랑 뭐가 다르냐 할수도 있는데, 실제로 다른거는 딱히 없다.

score=80 이런 방식도 결국은 읽어들이는 방식이기 때문이다.

 

read로 입력을 받을 때는 스페이스바를 기준으로 하나의 입력으로 계산한다.

이것이 무슨 말이냐면

read name score

라는 선언을 하면 name에 값을 하나 넣을 수 있고 score에 값을 하나 넣을 수 있다.

 

 

근데 만약 이런 가정을 해보자

두개의 입력을 받겠다고 선언을 해놓고 만약 3개의 선언을 받으면 어떻게 될까?

read name score

입력: kim 80 what

그러면 첫번째부터 스페이스바를 기준으로 하나씩 입력이 되지만 변수의 마지막을 기준으로 한번에 입력이 된다.

백문이 불여일견이니 예시를 보자.

보면 score라는 변수에 80 what이 들어갔음을 볼 수 있다.

이와같이 입력해야하는 변수보다 실제 값을 더 많이 입력했을 경우 공백을 포함하여 마지막에 저장하게 된다.

 

이번에는 read -t를 사용해보자

만약 -t옵션을 사용할 경우 해당 시간안에 반드시 입력을 완료하여야 한다.

3초내로 입력하지 않아서 자동으로 입력이 종료된다.

-t숫자 를 입력하면 반드시 입력한 숫자초 내로 입력을 완료하여야 한다.

 

read -n옵션도 보자

read -n8 이라고 하면 8글자 안으로만 입력하여야 한다.

password라는 변수에는 8글자만 들어간다.

그래서 passwo12 만 넣었더니 알아서 튕겨져 나오는 모습이다. (passwo123rd 를 넣으려고 했다)

 

read -s를 하면 silent 모드라고 해서 입력을 보이지 않게 받아준다.

처음에는 kim이라는 값을 name이라는 변수에 넣었다. 

그리고 -s옵션을 줘서 보이지 않게 choi 라는 값을 넣었다.

결과값은 choi로 나온다.

 

응용을 한번 해보자

echo -n "your name: " ; read name

이 명령어는 your name 이후에 새줄쓰기를 하지 않고 바로 값을 입력받도록 하는 것이다. ";" 기호로 두가지 명령어를 구분짓는다.

 

3. printf

C언어를 공부해본 사람이라면 당연히 알 수 있는 것인데 printf는 서식에 맞춰서 출력을 하는 기능이다. 단순히 echo를 사용하는 것과 다르게 여러 용도로 쓰여질 수 있다.

printf는 기본적으로 새로운 줄에 작성을 해주지 않는다.

\n으로 개행을 해주어야 한다.

%s는 문자를 입력받게 하고, \t는 tab키를 누른거 같은 기능을주고, %i는 숫자를 입력받을 수 있게 해준다.(%d도 정수를 입력받음)

 

printf로 서식을 지정하고 특정 변수에 결과값을 집어넣고 활용하고 싶다면 하기와 같이 응용한다.