# Pipe
: 이는 앞에있는 cmd의 standard output를 뒤의 standard input으로 이어주는 역할을 하는 command이다.
: 각각의 프로그램은 redirection과 pipe의 존재에 대해 아예 모른다.
-> 명령어들을 조합해서 새로운 명령을 실행한다.
#Filter
: data들을 standard input으로 부터 얻은 command들은 이를 변형하여 command output으로 결과를 내보낸다.
: standard input과 standard output를 동시에 사용하는 커맨드들이 있다.
EX) cat, cut, awk, grep, wc, sort, bc, haed
- standard output만 사용하는 command들이 있다. : date, du, df, ls, ps, pwd, who
- standard input과 output둘다 사용하지 않는 command가 있다.
: mkdir, rmdir, cd(directory oriented commands), cp, mv, rm ( basic file-handling commands)
1) cut: selected character나 field들을 standard input이나 file로부터 추출한다.
-> -d 뒤에는 구분자가 오며, f1..f6등은 구분자로 나눠진 index를 의미한다.
2) tr: translates or delete character
#Awk (Aho-Weinberger-Kerighan)
: awk는 파일로부터 레코드(record)를 선택하고, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 것을 목적으로 사용하는 프로그램이다. 즉 데이터를 분류하여 연산/데이터 조작등의 액션을 수행하고 그 결과를 출력한다.
-> 아래와 같이 사용한다.
awk 'pattern {action}'
awk '$3>0 {print $1,$2,$3}'
-> $3이 0인 이름만 출력하라, $3이 0보다 클 때 $2*$3을 연산한 결과를 출력하라...등의 예시가 존재한다.
1) 사용하는 변수
- Built-in : NF (number of fields), NR(number of input record seen)
- Fields: $0, $1, $2...
2) printf format conversion
: %c, %d, %o...
- cat sample | awk 'NR!=2{print $1,$2*$3,NF}'
: 이는 sample을 읽어들여 record가 2가 아닌 값을 출력하고, field 개수도 출력한다.
- cat sample | awk '$3>0{printf("pay for %s is %.3f",$1,$3*$2)'
: 이는 field 3가 0을 넘을때만, 각각의 값을 출력한다.
+) Text를 비교할때는 $1~"son" 등으로 ~를 이용해 문자열을 비교한다.
-> 공백을 기준으로 $1,$2..등의 field가 된다.
+) 참고 블로그
https://recipes4dev.tistory.com/171
#Alias
: command가 너무 길거나 일일히 치기 힘든 경우에 별칭을 붙여서 쉽게 실행할 수 있도록 만드는데, 이를 Alias라고 한다.
이름을 붙인 뒤에는 다른 어떤 command처럼 사용한다.
alias 별명='command 조합'
unalias 별명
alias l='ls -CF'
alias ls='ls --color=auto'
alias mm='date | cut -d" " -f2'
#First Script
- Script를 작성할때 가장 먼저 작성해야하는 것을 shebang/hashbang이라고 한다.
: shell script를 실행할때, subshell이라는 새로운 프로세스를 생성하는데 이 첫번째 줄이 shell을 시작하고 command를 실행하라고 말해주는 역할을 하는 것이다.
#!/bin/bash
echo "hello world!"
echo "I am done now!"
chmod +x hello.sh
./hello.sh #이를 통해 shell script속 command 가 실행된다.
#Positional Parameters
: 파라미터로 받는 인자에 각각 번호가 붙게 되고, 이는 ${digit}으로 표현한다.
#Shell Parameters : Special
- single character로 이루어진 special parameter들이 존재한다.
- $0: 현재 shell script 번호
- $# : positional parameter 개수
- $* : 모든 positional parameter
- $? : 최근 실행된 command의 exit status
- $$ : 현재 process의 pid
#Example 1
-> directory에 존재하는 파일들을 하나로 압축하는 것을 확인할 수 있다.
- $1은 positional parameter로, 받은 인자의 첫번째 자리를 의미한다.
+) tar -cvf ${압축후 파일명} ${압축할 파일이나 폴더명}
#Example 2
- 여기서 awk 뒤의 single quote는 positional parameter가 아닌 awk 자체의 문법을 따른다.
- stat $1이 inum이 된다. 따라서 inum.sh의 stat의 출력을 뒤의 awk에 넘겨준다.
: 따라서 $inum에는 inum.sh의 inode값이 저장되게 된다.
#User Input Example
: Shell은 user input을 읽어올 수 있게 해준다
#shell에서 사용할때
read varname [more vars]
#script에서 사용할때
read -p "prompt" varname1 varname2...
#! /bin/bash
read -p "enter your name:" first last
echo "First name:" $first
echo "Last name:" $last
#script example 3
'Computer Science > OpenSource+Git' 카테고리의 다른 글
Conditional Construct (0) | 2021.12.11 |
---|---|
Linux Command and Redirection (0) | 2021.12.11 |
shell command 확장과 명령어 치환 (0) | 2021.12.11 |
Shell Environment (0) | 2021.12.11 |
Git Branch Command (0) | 2021.10.24 |