Cheatsheet - Shell
쉘 커맨드들을 자주 까먹곤 해서 자주쓰는것 위주로 생각날때마다 하나씩 등록 예정.
Primitives
if statement
if [ 10 -gt 20 ]; then echo 'gt'; else echo 'lt'; fi;
operator | desc |
---|---|
! | not true |
-n | 문자열의 길이가 0보다 크다 |
-z | 문자열의 길이가 0이다 |
= | 문자열이 같다 |
-eq | 정수가 같다 |
-gt | 정수가 크다 |
-lt | 정수가 작다 |
-d dir | dir 디렉토리가 있다 |
-e file | file 이 있다 |
for statement
for file in *.sh; do echo $file; done
echo 로 출력해보면 마지막 값이 나오는것을 보면, file 이라는 변수에 값을 하나씩 할당하고
for 문 바깥에서도 유효함 (스코프바깥) 이 확인된다.
heredoc
cat > file.txt <<EOF
hello
this is nolleh
EOF
표준입력으로부터 파일을 생성하는 구문이다. 이렇게도 사용할 수 있지만, 쉘스크립트를 사용할때 아래와 같은 구문을 작성함으로써 복수의 라인을 변수로 선언하는 형태로도 사용가능하다.
sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)
Futher
strip string
let’s say you want to strip ‘sh’
echo ${a/.sh}
궁금해서 이렇게도 돌려봄.
test=aaabbb
echo ${test/a}
결과는 aabbb
recursive 하게 제거하지 않고, first occurrence 를 제거
curly brace 내부가 평가되어 rvalue 에 evaluation 될 수 있도록 감싸주는것을 잊지 말자.
list all files in directories
조금 재미있는건 이 명령어와
for file in ./*; do echo $file; done
이 명령어의 결과가 다르다는 점이다.
for file in *; do echo $file; done
ls ./* 평가 결과와 ls *의 차이로 봐도 무관할듯.
어떤 폴더의 결과를 출력할때 상대경로의 유무가 그 결과에도 함께 반영이 된다.
만약 순수하게 파일명만 가져오고 싶다면 후자를 사용해야할 것.