Bash Shell Programming

Bash Shell Programming(7)

Joon0464 2021. 7. 23. 19:13

본 글은 아래 영상을 통해 공부하고 작성했습니다. 제 글보다 영상 시청이 더 도움 될 것입니다.

https://youtu.be/jzcE4vCg1sU

Input & Output

1. echo

  • 화면에 텍스트를 출력하는 명령어
  • -n : 메시지 출력후 newline 문자를 추가하지 않는다.
  • -e : backslash escape 문자를 해석하여 특별한 의미를 지정한다.
  • \t(TAB키) \n(줄바꿈) \a(alert)

echo는 지정한 텍스트를 출력한다.
-n 옵션을 사용하면 문자를 출력 후에 줄바꿈이 일어나지 않는다.
-e를 사용하면 \n, \t, \a와 같은 escape 문자를 해석하여 적용한다.
변수를 출력하기 위해서는 $를 사용한다.

2. read

  • Standard input으로 부터 텍스트를 입력받음
  • -n : 지정한 문자수만큼 입력 받는다.
  • -t : 지정된 시간안에 입력 받는다.
  • -s : silent mode로 입력하는 글자가 보이지 않는다.
  • read 명령에서 변수 명 생략 시 기본 REPLY 변수에 채워진다.
    read score를 입력하고 80을 입력하면 score 변수의 값이 80으로 설정된다.

두개의 변수를 동시에 지정할 때는 공백(스페이스)로 변수를 구분하여 지정한다.
위와 같이 변수를 지정하면 joon이 name 변수의 값으로 80 classA가 score 변수의 값으로 설정된다.
-t를 5로 설정하고 5초안에 입력하지 않으면 name 변수에 비어있는 값이 들어간다.
-n을 5로 설정하면 5글자를 입력하는 순간 입력창이 닫히고 변수에 5글자가 값으로 들어가게 된다.
-s를 입력하면 입력하는 값이 보이지 않는다.
위의 예시처럼 echo와 read를 통해 대화식 처리를 쉘에서 구현할 수 있다.
분기 명령 실행할 때도 매우 유용하다.

3. printf

  • 서식 format에 맞춰서 출력이 가능한데, C언어의 printf 함수와 동일하다.
  • %d or %i 숫자
  • %s 문자영
  • %f 실수형 숫자

printf는 옵션이 없어도 escape 문자를 인식하며 기본값으로 줄바꿈 없이 출력한다.
변수로 넣어주고 싶은 순서대로 맨 뒤에 공백을 이용하여 구분하고 작성한다.
변수를 지정하고 해당 변수를 사용하여 printf에 위와 같이 활용할 수 있다.
10s는 10칸을 확보하여 글자를 입력받아 오른쪽으로 정렬하여 출력한다. 10.2f는 10칸을 확보하여 오른쪽에 정렬하며 입력받은 수를 실수로 받아들여 소수점 2번째 자리까지 표현한다.
-를 사용하면 왼쪽으로 정렬할 수 있다.

예제 1

# vi bin/input-exam.sh

#!/bin/bash
#:Usage		:input-exam.sh
#:Author	:"Hyunjoon Song"
echo -n "Input a directory name.:"
read dirname
echo "=================="
date +%Y-%m-%d
echo "=================="
du -sh $dirname 2> /dev/null
echo

chmod u+x bin/input-exam.sh

실행 결과

연습문제

다음의 조건에 맞는 shell script를 작성하세요.

1) 대화식으로 사용자에게 디렉토리 이름을 입력 받으시오.

2) 입력한 디렉토리의 모든 파일 목록을 /tmp/날짜.txt 파일에 지정하는 shell script를 작성 하시오.

결과:

$ joon.sh

Input a directory name: <디렉토리이름>

 

$ cat /tmp/20210515.txt

aa-enabled

aa-exec

acpi-listen

add-apt-repository

addpart

apport-bug

apport-cli

...

 

작성한 정답 코드

# vi bin/joon.sh

#!/bin/bash
printf "Input a directory name: "
read dirname
echo "-------------------------------------------"
ls -l $dirname > /tmp/`date +%Y%m%d`.txt
printf "%10s의 디렉토리 목록이 저장됨\n" $dirname
echo "-------------------------------------------"

실행 결과

 

'Bash Shell Programming' 카테고리의 다른 글

Bash Shell Programming(9)  (0) 2021.07.25
Bash Shell Programming(8)  (0) 2021.07.25
Bash Shell Programming(6)  (0) 2021.07.23
Bash Shell Programming(5)  (0) 2021.07.22
Bash Shell Programming(4)  (0) 2021.07.21