본문 바로가기
OS/Linux Server

[Shell Programming] 7. Input & Output

by Haengsin 2022. 3. 7.
Input & Output

1. echo

  • prints text to standard output
  • echo <옵션> <메시지>

   -n : 메시지 출력 후 newline 문자를 추가하지 않는다. (자동 줄바꿈 취소)

   -e : backslach escapes 문자를 해석하여 특별한 의미를 지정한다.

     \t     TAB키

     \n    줄바꿈

     \a    alert(bell)

  

  • Example
[centos@linux-mypc ~]$ echo "Your time is up"
Your time is up

[centos@linux-mypc ~]$ echo "Your time is up" > time.txt
[centos@linux-mypc ~]$ cat time.txt
Your time is up

[centos@linux-mypc ~]$ echo "Name:"
Name:
[centos@linux-mypc ~]$ echo -n "Name:"
Name:[centos@linux-mypc ~]$


[centos@linux-mypc ~]$ echo -e "First\tSecond"
First   Second
[centos@linux-mypc ~]$ echo -e "Name:\n"
Name:

 

2. read // 대화식 처리에 좋은 Command

  • reads text from standard input
  • read <옵션> 변수명

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

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

   -s : silent mode로 입력하는 글자가 보이지 않는다.

  • read 명령에서 변수 명 생략 시 기본 REPLY 변수에 채워진다.

 

  • Example
[centos@linux-mypc ~]$ read score
40
[centos@linux-mypc ~]$ echo $score
40


[centos@linux-mypc ~]$ read name score
a b
[centos@linux-mypc ~]$ echo $name
a
[centos@linux-mypc ~]$ echo $score
b

[centos@linux-mypc ~]$ read -t5 -n5 password	// -n5 옵션 : 다섯 글자 입력 받음.
												// -t5 옵션 : 5초 동안 입력안하면 사라짐.
[centos@linux-mypc ~]$
[centos@linux-mypc ~]$ echo $password
abcde
[centos@linux-mypc ~]$

[centos@linux-mypc ~]$ read -t5 -n5 -s password	// -s 옵션 : 입력이 안보임.
[centos@linux-mypc ~]$ echo $password
abcde

[centos@linux-mypc ~]$ echo -n "your name: " ; read name
your name: jaewon

 

3. printf

  • 서식 format에 맞춰서 출력할 수 있는데, C언어의 printf 함수와 동일  
    • printf format <메시지>

   %d or %i   숫자

   %s           문자열

   %f           실수형 숫자

 

  • Example
[centos@linux-mypc ~]$ Name=jaewon
[centos@linux-mypc ~]$ Score=100


[centos@linux-mypc ~]$ today=`date +%Y%m%d`
[centos@linux-mypc ~]$ echo $today
20220308
[centos@linux-mypc ~]$ echo "Today is %s\n" $today
Today is %s\n 20220308
[centos@linux-mypc ~]$ printf "Today is %s\n" $today
Today is 20220308


[centos@linux-mypc ~]$ printf "|%10s|%10s|%10.2f\n" ubuntu seongmi 10
|    ubuntu|   seongmi|     10.00
# 10 글자 씩 맞춰서 출력. 오른쪽부터 정렬(default)

[centos@linux-mypc ~]$ printf "|%-10s|%-10s|%10.2f\n" ubuntu seongmi 10
|ubuntu    |seongmi   |     10.00
# 10 글자 씩 맞춰서 출력. 왼쪽부터 정렬

 

 

※ 예제

 

[centos@linux-mypc bin]$ cat input.sh
#!/bin/bash

echo -n "input a directory name: "
read dirname
echo "======================================"
date +%Y-%m-%d
echo "======================================"
du -sh $dirname 2> /dev/null
echo

[centos@linux-mypc bin]$ sudo chmod +x input.sh
[centos@linux-mypc bin]$ input.sh
input a directory name: /etc
======================================
2022-03-08
======================================
19M     /etc

 

※ 예제 2

[centos@linux-mypc bin]$ cat dir-list.sh
#!/bin/bash

echo -n "Input a directory name:"
read $dir

ls -l $dir 1> ~/$(date +%Y-%m).txt


[centos@linux-mypc bin]$ dir-list.sh
Input a directory name:/var


[centos@linux-mypc bin]$ cat ../2022-03.txt
total 40
-rw-rw-r-- 1 centos centos 437 Mar  7 15:39 2022-03-07.txt
-rwxr-xr-x 1 root   root    94 Mar  8 10:46 dir-list.sh
-rwxr-xr-x 1 root   root   202 Mar  8 09:56 input.sh
-rwxr-xr-x 1 root   root    58 Mar  7 15:39 lab.sh
-rwxr-xr-x 1 root   root    63 Mar  2 23:35 out.sh
-rwxr-xr-x 1 root   root   233 Mar  4 09:52 parm.sh
-rwxrwxr-x 1 centos centos  66 Mar  2 23:18 sample2.sh
-rwxrwxr-x 1 centos centos  66 Mar  2 23:15 sample.sh
-rwxr-xr-x 1 centos centos  74 Mar  7 10:49 tt.sh
-rwxr-xr-x 1 root   root   108 Mar  4 10:29 varUsage.sh

 

 

 

 

 

 

Reference

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