Run The Bridge

shell script master -2- 본문

Cloud/Linux

shell script master -2-

anfrhrl5555 2022. 1. 3. 13:53
728x90

0. echo의 사용법

echo란 print 명령과 비슷하다.

echo hello world

root@p-iskim-worker1 ~/dir1 # echo hello world
hello world

 

또는 공백이 많을 때, 인용부호("", '')로 묶어줘야 공백을 포함해서 출력이 된다.

root@p-iskim-worker1 ~/dir1 # echo hello          world
hello world

root@p-iskim-worker1 ~/dir1 # echo "hello            world"
hello            world

 

why? 리눅스 쉘에서는 공백문자는 '단어와 단어', '명령어와 옵션', '옵션과 전달인자' 사이에서 구분자로 수행한다.

 

echo -e: 특수문자(줄바꿈, 탭, 수평탭, 수직탭)를 사용할 때

root@p-iskim-worker1 ~/dir1 # echo -e 'hello         world\n\n\n'
hello         world



root@p-iskim-worker1 ~/dir1 #

 

echo -n: 줄바꿈 처리가 되지않음

root@p-iskim-worker1 ~/dir1 # echo -n 'hello          world'
hello          worldroot@p-iskim-worker1 ~/dir1 #

 

echo *: 파일목록을 볼 수 있다(공백문자 하나만 가지고 구분된다.) → substring 할 때 사용한다.

root@p-iskim-worker1 ~/dir1 # echo *
dir11 dir22 dir33 helloworld.txt.sym

1. 명령의 구조

root@kube-master /etc/kubernetes # ls -l /usr

total 132
dr-xr-xr-x.  2 root root 28672 Jan  6 20:50 bin
drwxr-xr-x.  2 root root     6 Apr 11  2018 etc
drwxr-xr-x.  2 root root     6 Apr 11  2018 games
drwxr-xr-x. 37 root root  4096 Jan  6 20:38 include
dr-xr-xr-x. 29 root root  4096 Jan  6 20:38 lib
dr-xr-xr-x. 50 root root 28672 Jan  6 20:50 lib64
drwxr-xr-x. 27 root root  4096 Jan  6 20:52 libexec
drwxr-xr-x. 12 root root   131 Jan  6 20:25 local
dr-xr-xr-x.  2 root root 16384 Jan  6 20:50 sbin
drwxr-xr-x. 95 root root  4096 Jan  6 20:42 share
drwxr-xr-x.  4 root root    34 Jan  6 20:25 src
lrwxrwxrwx.  1 root root    10 Jan  6 20:25 tmp -> ../var/tmp

ls --l /usr  # 해당 명령어도 존재한다.


2. glob와 공백

tocuh: 파일이 없으면 빈 파일로 생성해주고, 파일이 존재하다면 현재 시간으로 파일의 수정 시각을 업데이트

 

glob = * = 애스터리스크


3. 인용문

root@kube-master ~/shell_script # rm 'Gone With the Wind.mp3'
rm: cannot remove ‘Gone With the Wind.mp3’: No such file or directory
root@kube-master ~/shell_script # touch 'Gone With the Wind.mp3'

root@kube-master ~/shell_script # ls -al
total 0
drwxr-xr-x. 2 root root  36 Jan  6 22:08 .
dr-xr-x---. 6 root root 211 Jan  6 22:05 ..
-rw-r--r--. 1 root root   0 Jan  6 22:08 Gone With the Wind.mp3

 

인용부호('', "")를 사용하지 않았을 때

root@kube-master ~/shell_script # touch Gone With the Wind.mp3
root@kube-master ~/shell_script # ll
total 0
-rw-r--r--. 1 root root 0 Jan  6 22:09 Gone
-rw-r--r--. 1 root root 0 Jan  6 22:08 Gone With the Wind.mp3
-rw-r--r--. 1 root root 0 Jan  6 22:09 the
-rw-r--r--. 1 root root 0 Jan  6 22:09 Wind.mp3
-rw-r--r--. 1 root root 0 Jan  6 22:09 With

4. [..]와 테스트

# mydir 디렉토리로 이동 후 'Gone With the Wind.mp3'라는 file이 있는지 Check
root@kube-master ~/shell_script # cd mydir; [ -f 'Gone With the Wind.mp3' ]

[..]를 사용 할 때 공백문자가 존재해야 한다.

 

또한 리눅스상에서 'echo $?'로 해당값이 참, 거짓인지 구분이 가능하다.

root@kube-master ~/shell_script/mydir # echo $?
0

0 = True, 1 = False로 보면된다.

 

root@kube-master ~/shell_script # cd mydir; [ -f 'Gone With the Wind.mp4' ]
root@kube-master ~/shell_script/mydir # echo $?
1

mp4로 바꾸자 echo의 값이 1로 바뀐것을 확인 할 수 있다.


5. 명령어(wc)

wc -w fruits.txt  # 지정한 단어의 개수를 출력해준다. -w: word
root@kube-master ~/shell_script/shell_cmd # cat fruits.txt
grapes
orange
tomato
strawberry
apple

---

root@kube-master ~/shell_script/shell_cmd # wc -l fruits.txt  # Line 수 확인
6 fruits.txt

---

root@kube-master ~/shell_script/shell_cmd # wc -L fruits.txt  # 해당 파일의 단어가 가장 긴 글자수 출력
10

---

wc -c fruits.txt  # 총 글자 수를 count 해준다.
39
  • wc -w: 단어 개수
  • wc -l: Line 수
  • wc -L: 가장 긴 글자 수
  • wc -c: 총 글자 수

6. 명령어(tail)

seq 1 200 > num200  # sequence의 약자로 range(0, 200)과 동일하다.

---

root@kube-master ~/shell_script/shell_cmd # tail -n 10 num200  # 끝에 10개의 라인 출력
191
192
193
194
195
196
197
198
199
200

---

root@kube-master ~/shell_script/shell_cmd # tail -n +10 num200  # 10이상의 값을 출력
10
11
12
13
14
15
16
17
18
19
20
.
.
.
191
192
193
194
195
196
197
198
199
200

---

root@kube-master ~/shell_script/shell_cmd # tail -n +101 num200 | head -n 10  # 101이상인 값을 가져오는데, 앞에서부터 10개만 가져온다.
101
102
103
104
105
106
107
108
109
110

---


7. 별칭(alias) - 발음 추가해놓기

vi ~/.bashrc에 등록해주고 source ~/.bashrc 로 적용한다.

alias mkdir='mkdir -p'  # 다음과 같은 양식으로 만들면된다.

 

alias보다 조금 심화된 기능으로 function이 존재한다.


8. 명령어(pushd/popd)

root@kube-master ~/shell_script # pushd .  # 현재 경로를 stack에 저장한다.
~/shell_script ~/shell_script

---

root@kube-master /etc/audit  # 다음 경로로 이동한다.

root@kube-master /etc/audit # popd  # stack에 저장된 경로로 이동

root@kube-master ~/shell_script # pwd
/root/shell_script

---

이 명령은 중첩해서 저장할 수 있다.(stack에 저장하는거라 1회성으로 사용하면 사라진다.)


9. 명령어(printf)

root@kube-master ~ # printf "%02d\n" 1
01

root@kube-master ~ # printf "%05d\n" 1
00001

---

root@kube-master ~ # name=michael; printf -v legend "%s jackson" $name; echo $legend  # -v 옵션으로 변수를 줄 수 있음(variable)
michael jackson

10. 명령어(read)

root@kube-master ~ # read num  # read 명령어는 사용자의 입력을 기다린다. python의 input, C언어의 scanf_s와 같다
5
root@kube-master ~ # echo $num
5

---

# -p(print) 옵션을 통해 화면 출력이 가능하다.
root@kube-master ~ # read -p "what is your phone number" v  # 변수명 v에 저장된다.
what is your phone number010-1234-5678

root@kube-master ~ # echo $v
010-1234-5678

---

# -n 옵션은 입력 후 Enter키를 별도로 입력하지 않아도 된다.
# 사용자의 글자 수를 제한한다.
root@kube-master ~ # read -n 1 -p "Are you over 16? " v  
Are you over 16? yroot@kube-master ~ #

---

# 사용자의 입력을 보이지 않게 하는법: -s(slient)옵션을 사용한다.
root@kube-master ~ # read -s -n 1 -p "Are you over 16? " v
Are you over 16? root@kube-master ~ #

---

# -t 옵션은 사용자의 입력 대기시간을 지정한다. 3초
root@kube-master ~ # read -s -n 1 -t 3 "Are you over 16? " v
-bash: read: `Are you over 16? ': not a valid identifier
root@kube-master ~ #
  • -p(print): 사용자의 입력을 출력한다.
  • -n $(num): 글자 수 초과 시 별도의 엔터 입력을 받지 않음
  • -s: 사용자의 입력을 가린다.
  • -t: 입력 대기시간을 지정한다.
  • -e: 줄바꿈 '\n'을 실행한다.

11. while..do..done

root@kube-master ~ # no=1; while (( no < 19 )); do printf "%02d\n" $no; ((no++)); done
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18

0. no=1  # 변수 선언 및 값 할당

1. while (( no < 19 ));  # no이 19 보다 커질 때 까지 반복

2. do printf "%02d\n" $no  # no을 2자리수로 출력 ex) 01, 02, 03, 04

3. ((no++))  # no를 1증가 시킨다.


12. 실행파일을 사용하는 방법 4가지

root@kube-master ~ # echo 'echo hello world' > helloworld.sh
root@kube-master ~ # chmod +x helloworld.sh
root@kube-master ~ # ./helloworld.sh
hello world

--- 1번쨰(/usr/bin 으로 옮기기)

root@kube-master ~ # cp helloworld.sh /usr/bin  # /usr/bin은 root 권한으로만 접근가능
root@kube-master ~ # helloworld.sh
hello world

--- 2번쨰(실행파일의 절대경로를 쓰기)

root@kube-master ~ # /root/helloworld.sh
hello world

---3번째 PATH 추가하기

root@kube-master ~/shell_script/shell_cmd # PATH=$PATH:~/root/shell_script/shell_cmd

root@kube-master ~/shell_script/shell_cmd # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/shell_script/shell_cmd

---4번째 ./로 실행해주기

root@kube-master ~/shell_script/shell_cmd # ./helloworld.sh
hello world
728x90

'Cloud > Linux' 카테고리의 다른 글

shell script master -5-  (0) 2022.01.21
shell script master -4-  (0) 2022.01.13
i-node 실습  (0) 2022.01.12
shell script master -3-  (0) 2022.01.05
shell script master -1-  (2) 2022.01.03
Comments