bash shell cheat sheet
15215 단어 bash 매개 변수bash 매개 변수
test 커맨드
- test expression
- true/false 를 계산하는 표현식
- file expression
- file1 -ef file2 : inode가 같은지
- file1 -nt file2 : file1이 file2 보다 새것인지
- file1 -ot file2 : file1이 file2 보다 오래되었는지
- -b file : block-special file
- -c file : character-special file
- -d file : directory
- -e file : exists
- -f file : regular file
- -g file : group-ID 가 set 되어있는지
- -G file : effective group ID를 소유했는지
- -k file : stick bit 가 set 되어있는지
- -L file : symbolic link
- -O file : effecitve user ID를 소유했는지
- -p file : named pipe
- -r file : readable
- -s file : size가 0보다 큰지
- -S file : network socket
- -t fd : file descriptor 인지
- -u file : setuid
- -w file : writable
- -x file : executable
- test String 표현식
- string : null이 아닌지
- -n string : 길이가 0보다 큰지
- -z string : 길이가 0 인지
- string1 = string2 : equal
- string1 == string2 : equal (POSIX compliant는 아님)
- string1 != string2 : 다른지
- string1 > string2 : 정렬하면 string2이 나오고 string1이 나오는지
- string1 < string2 : 정렬하면 string1이 먼저 나오는지
- test Integer 표현식
- integer1 -eq integer2
- integer1 -ne integer2
- integer1 -le integer2
- integer1 -lt integer2
- integer1 -ge integer2
- integer1 -gt integer2
- Modern test
- [[ expression ]]
- string expression이 추가 됨
- string1 =~ regex
- (( )) : integer 계산에 사용 됨
bash 매개 변수
위치 매개 변수 (Positional Parameters)
- $0 : 실행된 스크립트 이름
- $1 : $1 $2 $3...${10}인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함
- $* : 전체 인자 값
- $@ : 전체 인자 값($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴)
- $# : 매개 변수 총 개수
#!/bin/bash
# posit-params3: script to demonstrate $* and $@
print_params () {
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
}
pass_params () {
echo -e "\n" '$* :'; print_params $*
echo -e "\n" '"$*" :'; print_params "$*"
echo -e "\n" '$@ :'; print_params $@
echo -e "\n" '"$@" :'; print_params "$@"
}
pass_params "word" "words with spaces"
posit-param3
$* :
$1 = word
$2 = words
$3 = with
$4 = spaces
"$*" :
$1 = word words with spaces
$2 =
$3 =
$4 =
$@ :
$1 = word
$2 = words
$3 = with
$4 = spaces
"$@" :
$1 = word
$2 = words with spaces
$3 =
$4 =
특수 매개 변수 (Special Parameters)
- $$ : 현재 스크립트의 pid
- $? : 최근에 실행된 명령어, 함수, 스크립트 자식의 종료 상태
- $! : 최근에 실행된 백그라운드(비동기) 명령의 PID
- $- : 현재 옵션 플래그
- $_ : 지난 명령의 마지막 인자로 설정된 특수 변수
매개 변수 확장 (Parameter Expansion)
- string="abc-efg-123-abc"
- ${변수} : $변수 와 동일하지만 {} 사용해야지만 동작하는 것들이 있음(예: echo ${string})
- ${변수:위치} : 위치 다음부터 문자열 추출(예: echo ${string:4})
- ${변수:위치:길이} : 위치 다음부터 지정한 길이 만큼의 문자열 추출(예: echo ${string:4:3})
- ${변수:-단어} : 변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수는 사용 불가(예: echo $string:-HELLO})
- ${변수-단어} : 변수 미선언시만 기본값 지정, 위치 매개 변수는 사용 불가(예: echo $string-HELLO})
- ${변수:=단어} : 변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수 사용 가능, 변수에 값 설정이 안되어 있는 경우 단어로 설정 됨(예: echo ${string:=HELLO})
- ${변수=단어} : 변수 미선언시만 기본값 지정, 위치 매개 변수 사용 가능(예: echo ${string=HELLO}
- ${변수:?단어} : 변수 미선언 혹은 NULL일때 단어 출력 후 스크립트 종료(예: echo ${string:?HELLO})
- ${변수?단어} : 변수 미선언시만 단어 출력 후 스크립트 종료(예: echo ${string?HELLO})
- ${변수:+단어} : 변수 선언시만 단어 사용(예: echo ${string:+HELLO})
- ${번수+단어} : 변수 선언 혹은 NULL일때 단어 사용(예: echo ${string+HELLO})
- ${#변수} : 문자열 길이(예: echo ${#string})
- ${변수#단어} : 변수의 앞부분부터 짧게 일치한 단어 삭제(예: echo ${string#a*b})
- ${변수##단어} : 변수의 앞부분부터 길게 일치한 단어 삭제(예: echo ${string##a*b})
- ${변수%단어} : 변수의 뒷부분부터 짧게 일치한 단어 삭제(예: echo ${string%b*c})
- ${변수%%단어} : 변수의 뒷부분부터 길게 일치한 단어 삭제(예: echo ${string%%b*c})
- ${변수/찾는단어/변경단어} : 처음 일치한 단어를 변경(예: echo ${string/abc/HELLO})
- ${변수//찾는단어/변경단어} : 일치하는 모든 단어를 변경(예: echo ${string//abc/HELLO})
- ${변수/#찾는단어/변경단어} : 앞부분이 일치하면 변경(예: echo ${string/#abc/HELLO})
- ${변수/%찾는단어/변경단어} : 뒷부분이 일치하면 변경(예: echo ${string/%abc/HELLO})
- ${!단어*}, ${!단어@} : 선언된 변수중에서 단어가 포함된 변수 명 추출(예: echo ${!string*}, echo ${!string@})
lower or uppercase conversion
- declare -l 변수 or declare -u 변수
- declare를 사용해서 변수에 소문자 또는 대문자로 저장
- ${parameter,,pattern}
- parameter의 글자를 모두 소문자로 변경, 옵션으로 특정 pattern이 매칭 되는 것만 변경
- ${parameter,pattern}
- 첫 글자만 소문자로 변경
- ${parameter^^pattern}
- 모든 글자를 대문자로 변경
- ${parameter^pattern}
- 첫 글자만 대문자로 변경
shift command
- shift 명령으로 인자를 왼쪽으로 민다
- $1=a $2=b 에서 $1=b 가 된다.
Quoting (인용)
- ' ' : 뒤에 오는 모든 특수문자를 일반 문자로 인식 (모든 특수 문자 쿼팅)
- " " : " " 사이에 들어있는 모든 특수 문자를 일반 문자로 인식
- $()와 ` `(명령어 대체 특수문자), $ (변수 값 대체 특수문자), \ (quotation 특수문자) 등은 예외
- \ : 특수문자 바로 앞에 사용되는데 해당 특수문자의 효과를 없애고 일반 문자처럼 처리
- ` ` : 역 따옴표는 따옴표 안에 있는 명령문의 실행하여 실행결과를 대입
괄호
- () : 함수 인수의 시작과 끝, 서브 쉘 작성, 배열 초기화
- (()) : 산술 연산에 사용
- {} : 명령 블록의 시작과 끝, 각종 변수의 존재범위도 연관됨, 매개변수 확장, 반복되는 문자열 목록 작성, 변수를 명확하게 식별
- [] : 배열 인덱스, 테스트 조건을 정의
- [[]] : 기본적으로 단일 대괄호와 동일한 기능을 수행하지만 bash 내장
수식
- [] : 정수 연산만 기능
var1=$[1 + 2]
var2=$[$var1*2]
- (( )) :
x=3; y=4
z=$((x+y))
- let
x=3; y=4
let z=$x+$y
- expr : 숫자와 연산자 사이를 띄어써야 함
x=3; y=4
expr $x + $y
- awk
x=3; y=4
echo $x $y | awk '{print $1+$2}'
let 연산자
- + , - ,/ , * : 사칙연산
- ** : exponentiation
- % : mod
- 나머지 연산자 c언어와 동일해서 생략
Loop
- while commands; do commands; done
- until commands; do commands; done
- until은 조건이 while과 반대
- for
for variable [in words]; do
commands
done
- for: c language form
for (( expression1; expression2; expression3 )); do
commands
done
case command
case word in
[pattern [| pattern]...) commands ;;]...
esac
- pattern 예시
- a) : word가 a인지
- [[:alpha:]] : word가 alphabet으로 이루어졌는지
- ???) : word가 문자 세개인지
- *.txt) : .txt 로 끝나는지
- *) : 어떠 한 값도 매칭
- 계속 검사를 수행하려면 ;;& 를 사용
기타
basename / dirname
- 파일명과 경로가 있는 문자열에서 파일명만 출력(basename), 경로만 출력(dirname)
- basename path/file -> output : file
- basename -a path1/file1 path1/file2 -> output : file1 file2
- -a 여러 경로의 파일명 출력
- basename -s path/file.so -> output : file.so
- -s 확장자를 명시
- dirname path/file -> output : path
script debugging
- -x 옵션 사용
- !/bin/bash -x 로 사용하거나
- script 에서 set -x 으로 tracing을 키고 set +x 로 tracing을 끈다.
- PS4 : tracing 출력시 prompt
- export PS4='$LINENO + ' : 라인 넘버까지 출력 가능
- true/false 를 계산하는 표현식
- file1 -ef file2 : inode가 같은지
- file1 -nt file2 : file1이 file2 보다 새것인지
- file1 -ot file2 : file1이 file2 보다 오래되었는지
- -b file : block-special file
- -c file : character-special file
- -d file : directory
- -e file : exists
- -f file : regular file
- -g file : group-ID 가 set 되어있는지
- -G file : effective group ID를 소유했는지
- -k file : stick bit 가 set 되어있는지
- -L file : symbolic link
- -O file : effecitve user ID를 소유했는지
- -p file : named pipe
- -r file : readable
- -s file : size가 0보다 큰지
- -S file : network socket
- -t fd : file descriptor 인지
- -u file : setuid
- -w file : writable
- -x file : executable
- string : null이 아닌지
- -n string : 길이가 0보다 큰지
- -z string : 길이가 0 인지
- string1 = string2 : equal
- string1 == string2 : equal (POSIX compliant는 아님)
- string1 != string2 : 다른지
- string1 > string2 : 정렬하면 string2이 나오고 string1이 나오는지
- string1 < string2 : 정렬하면 string1이 먼저 나오는지
- integer1 -eq integer2
- integer1 -ne integer2
- integer1 -le integer2
- integer1 -lt integer2
- integer1 -ge integer2
- integer1 -gt integer2
- [[ expression ]]
- string expression이 추가 됨
- string1 =~ regex
- string expression이 추가 됨
- (( )) : integer 계산에 사용 됨
위치 매개 변수 (Positional Parameters)
- $0 : 실행된 스크립트 이름
- $1 : $1 $2 $3...${10}인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함
- $* : 전체 인자 값
- $@ : 전체 인자 값($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴)
- $# : 매개 변수 총 개수
#!/bin/bash
# posit-params3: script to demonstrate $* and $@
print_params () {
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
}
pass_params () {
echo -e "\n" '$* :'; print_params $*
echo -e "\n" '"$*" :'; print_params "$*"
echo -e "\n" '$@ :'; print_params $@
echo -e "\n" '"$@" :'; print_params "$@"
}
pass_params "word" "words with spaces"
posit-param3
$* :
$1 = word
$2 = words
$3 = with
$4 = spaces
"$*" :
$1 = word words with spaces
$2 =
$3 =
$4 =
$@ :
$1 = word
$2 = words
$3 = with
$4 = spaces
"$@" :
$1 = word
$2 = words with spaces
$3 =
$4 =
특수 매개 변수 (Special Parameters)
- $$ : 현재 스크립트의 pid
- $? : 최근에 실행된 명령어, 함수, 스크립트 자식의 종료 상태
- $! : 최근에 실행된 백그라운드(비동기) 명령의 PID
- $- : 현재 옵션 플래그
- $_ : 지난 명령의 마지막 인자로 설정된 특수 변수
매개 변수 확장 (Parameter Expansion)
- string="abc-efg-123-abc"
- ${변수} : $변수 와 동일하지만 {} 사용해야지만 동작하는 것들이 있음(예: echo ${string})
- ${변수:위치} : 위치 다음부터 문자열 추출(예: echo ${string:4})
- ${변수:위치:길이} : 위치 다음부터 지정한 길이 만큼의 문자열 추출(예: echo ${string:4:3})
- ${변수:-단어} : 변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수는 사용 불가(예: echo $string:-HELLO})
- ${변수-단어} : 변수 미선언시만 기본값 지정, 위치 매개 변수는 사용 불가(예: echo $string-HELLO})
- ${변수:=단어} : 변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수 사용 가능, 변수에 값 설정이 안되어 있는 경우 단어로 설정 됨(예: echo ${string:=HELLO})
- ${변수=단어} : 변수 미선언시만 기본값 지정, 위치 매개 변수 사용 가능(예: echo ${string=HELLO}
- ${변수:?단어} : 변수 미선언 혹은 NULL일때 단어 출력 후 스크립트 종료(예: echo ${string:?HELLO})
- ${변수?단어} : 변수 미선언시만 단어 출력 후 스크립트 종료(예: echo ${string?HELLO})
- ${변수:+단어} : 변수 선언시만 단어 사용(예: echo ${string:+HELLO})
- ${번수+단어} : 변수 선언 혹은 NULL일때 단어 사용(예: echo ${string+HELLO})
- ${#변수} : 문자열 길이(예: echo ${#string})
- ${변수#단어} : 변수의 앞부분부터 짧게 일치한 단어 삭제(예: echo ${string#a*b})
- ${변수##단어} : 변수의 앞부분부터 길게 일치한 단어 삭제(예: echo ${string##a*b})
- ${변수%단어} : 변수의 뒷부분부터 짧게 일치한 단어 삭제(예: echo ${string%b*c})
- ${변수%%단어} : 변수의 뒷부분부터 길게 일치한 단어 삭제(예: echo ${string%%b*c})
- ${변수/찾는단어/변경단어} : 처음 일치한 단어를 변경(예: echo ${string/abc/HELLO})
- ${변수//찾는단어/변경단어} : 일치하는 모든 단어를 변경(예: echo ${string//abc/HELLO})
- ${변수/#찾는단어/변경단어} : 앞부분이 일치하면 변경(예: echo ${string/#abc/HELLO})
- ${변수/%찾는단어/변경단어} : 뒷부분이 일치하면 변경(예: echo ${string/%abc/HELLO})
- ${!단어*}, ${!단어@} : 선언된 변수중에서 단어가 포함된 변수 명 추출(예: echo ${!string*}, echo ${!string@})
lower or uppercase conversion
- declare -l 변수 or declare -u 변수
- declare를 사용해서 변수에 소문자 또는 대문자로 저장
- ${parameter,,pattern}
- parameter의 글자를 모두 소문자로 변경, 옵션으로 특정 pattern이 매칭 되는 것만 변경
- ${parameter,pattern}
- 첫 글자만 소문자로 변경
- ${parameter^^pattern}
- 모든 글자를 대문자로 변경
- ${parameter^pattern}
- 첫 글자만 대문자로 변경
shift command
- shift 명령으로 인자를 왼쪽으로 민다
- $1=a $2=b 에서 $1=b 가 된다.
Quoting (인용)
- ' ' : 뒤에 오는 모든 특수문자를 일반 문자로 인식 (모든 특수 문자 쿼팅)
- " " : " " 사이에 들어있는 모든 특수 문자를 일반 문자로 인식
- $()와 ` `(명령어 대체 특수문자), $ (변수 값 대체 특수문자), \ (quotation 특수문자) 등은 예외
- \ : 특수문자 바로 앞에 사용되는데 해당 특수문자의 효과를 없애고 일반 문자처럼 처리
- ` ` : 역 따옴표는 따옴표 안에 있는 명령문의 실행하여 실행결과를 대입
괄호
- () : 함수 인수의 시작과 끝, 서브 쉘 작성, 배열 초기화
- (()) : 산술 연산에 사용
- {} : 명령 블록의 시작과 끝, 각종 변수의 존재범위도 연관됨, 매개변수 확장, 반복되는 문자열 목록 작성, 변수를 명확하게 식별
- [] : 배열 인덱스, 테스트 조건을 정의
- [[]] : 기본적으로 단일 대괄호와 동일한 기능을 수행하지만 bash 내장
수식
- [] : 정수 연산만 기능
var1=$[1 + 2]
var2=$[$var1*2]
- (( )) :
x=3; y=4
z=$((x+y))
- let
x=3; y=4
let z=$x+$y
- expr : 숫자와 연산자 사이를 띄어써야 함
x=3; y=4
expr $x + $y
- awk
x=3; y=4
echo $x $y | awk '{print $1+$2}'
let 연산자
- + , - ,/ , * : 사칙연산
- ** : exponentiation
- % : mod
- 나머지 연산자 c언어와 동일해서 생략
Loop
- while commands; do commands; done
- until commands; do commands; done
- until은 조건이 while과 반대
- for
for variable [in words]; do
commands
done
- for: c language form
for (( expression1; expression2; expression3 )); do
commands
done
case command
case word in
[pattern [| pattern]...) commands ;;]...
esac
- pattern 예시
- a) : word가 a인지
- [[:alpha:]] : word가 alphabet으로 이루어졌는지
- ???) : word가 문자 세개인지
- *.txt) : .txt 로 끝나는지
- *) : 어떠 한 값도 매칭
- 계속 검사를 수행하려면 ;;& 를 사용
기타
basename / dirname
- 파일명과 경로가 있는 문자열에서 파일명만 출력(basename), 경로만 출력(dirname)
- basename path/file -> output : file
- basename -a path1/file1 path1/file2 -> output : file1 file2
- -a 여러 경로의 파일명 출력
- basename -s path/file.so -> output : file.so
- -s 확장자를 명시
- dirname path/file -> output : path
script debugging
- -x 옵션 사용
- !/bin/bash -x 로 사용하거나
- script 에서 set -x 으로 tracing을 키고 set +x 로 tracing을 끈다.
- PS4 : tracing 출력시 prompt
- export PS4='$LINENO + ' : 라인 넘버까지 출력 가능
- $()와 ` `(명령어 대체 특수문자), $ (변수 값 대체 특수문자), \ (quotation 특수문자) 등은 예외
- () : 함수 인수의 시작과 끝, 서브 쉘 작성, 배열 초기화
- (()) : 산술 연산에 사용
- {} : 명령 블록의 시작과 끝, 각종 변수의 존재범위도 연관됨, 매개변수 확장, 반복되는 문자열 목록 작성, 변수를 명확하게 식별
- [] : 배열 인덱스, 테스트 조건을 정의
- [[]] : 기본적으로 단일 대괄호와 동일한 기능을 수행하지만 bash 내장
수식
- [] : 정수 연산만 기능
var1=$[1 + 2]
var2=$[$var1*2]
- (( )) :
x=3; y=4
z=$((x+y))
- let
x=3; y=4
let z=$x+$y
- expr : 숫자와 연산자 사이를 띄어써야 함
x=3; y=4
expr $x + $y
- awk
x=3; y=4
echo $x $y | awk '{print $1+$2}'
let 연산자
- + , - ,/ , * : 사칙연산
- ** : exponentiation
- % : mod
- 나머지 연산자 c언어와 동일해서 생략
Loop
- while commands; do commands; done
- until commands; do commands; done
- until은 조건이 while과 반대
- for
for variable [in words]; do
commands
done
- for: c language form
for (( expression1; expression2; expression3 )); do
commands
done
case command
case word in
[pattern [| pattern]...) commands ;;]...
esac
- pattern 예시
- a) : word가 a인지
- [[:alpha:]] : word가 alphabet으로 이루어졌는지
- ???) : word가 문자 세개인지
- *.txt) : .txt 로 끝나는지
- *) : 어떠 한 값도 매칭
- 계속 검사를 수행하려면 ;;& 를 사용
기타
basename / dirname
- 파일명과 경로가 있는 문자열에서 파일명만 출력(basename), 경로만 출력(dirname)
- basename path/file -> output : file
- basename -a path1/file1 path1/file2 -> output : file1 file2
- -a 여러 경로의 파일명 출력
- basename -s path/file.so -> output : file.so
- -s 확장자를 명시
- dirname path/file -> output : path
script debugging
- -x 옵션 사용
- !/bin/bash -x 로 사용하거나
- script 에서 set -x 으로 tracing을 키고 set +x 로 tracing을 끈다.
- PS4 : tracing 출력시 prompt
- export PS4='$LINENO + ' : 라인 넘버까지 출력 가능
var1=$[1 + 2]
var2=$[$var1*2]
x=3; y=4
z=$((x+y))
x=3; y=4
let z=$x+$y
x=3; y=4
expr $x + $y
x=3; y=4
echo $x $y | awk '{print $1+$2}'
- while commands; do commands; done
- until commands; do commands; done
- until은 조건이 while과 반대
- for
for variable [in words]; do commands done
- for: c language form
for (( expression1; expression2; expression3 )); do commands done
case command
case word in
[pattern [| pattern]...) commands ;;]...
esac
- pattern 예시
- a) : word가 a인지
- [[:alpha:]] : word가 alphabet으로 이루어졌는지
- ???) : word가 문자 세개인지
- *.txt) : .txt 로 끝나는지
- *) : 어떠 한 값도 매칭
- 계속 검사를 수행하려면 ;;& 를 사용
기타
basename / dirname
- 파일명과 경로가 있는 문자열에서 파일명만 출력(basename), 경로만 출력(dirname)
- basename path/file -> output : file
- basename -a path1/file1 path1/file2 -> output : file1 file2
- -a 여러 경로의 파일명 출력
- basename -s path/file.so -> output : file.so
- -s 확장자를 명시
- dirname path/file -> output : path
script debugging
- -x 옵션 사용
- !/bin/bash -x 로 사용하거나
- script 에서 set -x 으로 tracing을 키고 set +x 로 tracing을 끈다.
- PS4 : tracing 출력시 prompt
- export PS4='$LINENO + ' : 라인 넘버까지 출력 가능
case word in
[pattern [| pattern]...) commands ;;]...
esac
- a) : word가 a인지
- [[:alpha:]] : word가 alphabet으로 이루어졌는지
- ???) : word가 문자 세개인지
- *.txt) : .txt 로 끝나는지
- *) : 어떠 한 값도 매칭
basename / dirname
- 파일명과 경로가 있는 문자열에서 파일명만 출력(basename), 경로만 출력(dirname)
- basename path/file -> output : file
- basename -a path1/file1 path1/file2 -> output : file1 file2
- -a 여러 경로의 파일명 출력
- basename -s path/file.so -> output : file.so
- -s 확장자를 명시
- dirname path/file -> output : path
script debugging
- -x 옵션 사용
- !/bin/bash -x 로 사용하거나
- script 에서 set -x 으로 tracing을 키고 set +x 로 tracing을 끈다.
- PS4 : tracing 출력시 prompt
- export PS4='$LINENO + ' : 라인 넘버까지 출력 가능
참고
Author And Source
이 문제에 관하여(bash shell cheat sheet), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dohyung4242/bash-shell-cheat-sheet저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)