일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 건대입구역
- 하체
- 러닝
- GitHub
- Python
- Kubernetes
- 맛집
- 달리기
- 대전
- Run The Bridge
- 10km
- Linux
- Grafana
- 대구
- 한강
- Podman
- 2021
- 중식
- docker
- zabbix
- 소모임
- 자전거
- 정보처리기사
- 오답노트
- 뚝섬유원지
- DSEC
- 성수대교
- Shell
- 유산소
- 힐링
- Today
- Total
Run The Bridge
shell script master -2- 본문
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
'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 |