본문 바로가기
Today I learned

셸스크립트 문법 정리

by soheemon 2020. 8. 25.

여름아 가지마! 갈때 가더라도 셸스크립트는 정리하고 가자!

"본격적인 파티전에 기본문법 cheat sheet 정리하기"

https://devhints.io/bash 를 참고했습니다.

https://wiki.bash-hackers.org/syntax/pe 를 참고했습니다.

# substring
${FOO:0:3} #=> substring(position, length) 왼쪽에서 0번째부터 3글자
${FOO:(-3):3} #=> 오른쪽부터 substring

#length
${#FOO} #=> $FOO의 길이

# 대소문자로 변환하기
STR="HELLO WORLD!"
echo ${STR,}  #=> "hELLO WORLD!" 맨 첫번째 문자만 소문자로
echo ${STR,,}  #=> "hello world!" 전부 소문자로

STR="hello world!"
echo ${STR^}  #=> "Hello world!" 맨 첫번째 문자만 대문자로
echo $P{STR^^}  #=> "HELLO WORLD" 전부 대문자로

# Default Value
ECHO ${FOO:-defval}  #=> defval FOO가 선언되지 않거나 혹은 null인경우 defval로 출력
ECHO ${FOO:=defval}  #=> FOO가 선언되지 않거나 null인경우 FOO를 defval에 set한다(?)
ECHO ${FOO:+defval}  #=> $FOO가 선언되어있거나 널이아닌경우 defval 출력
ECHO ${FOO:?message} #=> $FOO가 선언되지 않은경우나 null인경우 message를 출력하고 종료

#for loop(for-in)

for i in /etc/rc.*; do
  echo $i #=> in의 결과를 i로 하나씩 받아온다.
done

#for loop (default)
for ((i = 0 ; i < 100 i ++)); do
  echo $i
done

#범위
for i in {1..5}; do
  echo "Welcome $i"
done

#5부터 50까지 5씩증가..?
for i in {5..50..5}; do
  echo "Welcome $i"
done

# 무한루프
while true; do
  ...
done

# function 선언
function myfunc() { #=> function은 생략 가능
  echo "hello $1"
}

# 함수 호출
myfunc "sohee!"

# 함수 결과 반환
myfunc() {
  return 1
}

if myfunc; then
  echo "Success"
else
  echo "failure"
fi

# 파라미터어어
myfunc() {
  echo $#  #=> 3 파라미터를 몇개 넘겼을까요오
  echo $*  #=> 1 2 3 모든 인수를 출력합니다 
  echo $@  #=> 1 2 3 모든 인수를 출력한다 (위에랑 뭔차이지..?)
  echo "$1 $2" #=> 1 2 첫번째 두번째 인수를 출력한다
  echo $_ #=> 이전명령의 마지막 인수를 출력한다. 독특하다.
}

myfunc 1 2 3

댓글