if / case / for / while / 조건문

markyang92·2021년 5월 7일
0

shell-script

목록 보기
10/19
post-thumbnail

if

if [ 조건 ]; then
    내용
fi
if [ 조건 ] ; then 내용 ; fi

else


elif


case

  • 기본
  • case문은 여러번 사용 가능
  • 확장정규식 '|' 사용 가능

for

  • 변수=$(stdout) 으로 대입 시, spacebar 로 sep 되기 때문에 매우 주의할 것!!
#!bin/bash
for line in ${RUNNER}; do
    echo $line
done

==== 출력 ====
mark@10.17.4.13:/home/downloads
mark@10.178.4.13:/shared/downloads
mark@10.175.4.13:/shared/downloads
#!bin/bash
for line in "${RUNNER}"; do
    echo $line
done

==== 출력 ====
mark@10.17.4.13:/home/downloads mark@10.178.4.13:/shared/downloads mark@10.175.4.13:/shared/downloads

2개


C-like for 文

#!/bin/bash
# Display message 5 times
for ((i = 0 ; i < 5 ; i++)); do
  echo "Welcome $i times."
done

# === 한 줄 명령 === #
$ for ((i=0;i<3;i++)); do echo "Welcome $i times."; done

while

#!/bin/bash

num=5

while [ $num -ge 0 ]
do
  echo $num
  ((num--))
done

무한루프

#!/bin/bash

num=5

while true
do
  echo $num
  ((num--))
done

조건

참고: https://hand-over.tistory.com/32

문자열

-z: 문자열 길이 = 0 true


-n: 문자열 길이 !=0 true


=: 문자열 같으면 true

  1. 문자열 같으면 true


!=: 문자열이 다르면 true


=~: 문자열 중 일부 포함 시 true

  • A 안에 B 와 일치하는 문자열이 있으면, true
    if [[ "$A" =~ "$B" ]]; then
    • "ABCDEFGHI" =~ "ABC" 처럼 A <- B? 형태
    • "ABC" =~ "ABCDEFGHI", A? -> B 는 false
$ VAR=`locale | grep "^LANG="`
$ if [[ $VAR =~ "ko" ]] ; then echo "VAR in KO " ; fi

위와 같음

if [[ $VAR =~ "ko" ]]
then
	echo "VAR in KO"
fi

<: 사전적 비교

>: 사전적 비교


파일류

! : 반대


-d: 디렉토리면 true

  1. -d는 디렉토리인지?


  1. : test2 디렉토리가 존재하면 지우기


-f: 'regular 파일' 시 true


-e: 파일이 존재하면 true

[ -e FILE ] && rm FILE

  • readlink -e LINK_FILE을 사용하면, symbolic link가 가리키는 찐 파일의 절대경로STDOUT으로 출력한다.


-c: 파일이 존재, character special 파일이면 true


-b: 파일 존재, block special 파일 시 true


-p: 파일 존재, {named,unnamed}pipe 이거나 <( ...) 면 true


-S: 파일 존재, socket 시 true




-g: 파일 존재, sgid bit 셋 시 true


-u: 파일 존재, suid bit 셋 시 true


-k: 파일 존재, sticky bit 셋 시 true


-r: 파일 존재, reable true


-w: 파일 존재, writable true


-x: 파일 존재, executable true


-O: 파일 존재, uid가 같으면 true


-G: 파일 존재, gid가 같으면 true


-N: 파일 존재, 마지막에 read 한뒤로 modify 됬으면 true


-s: 파일 존재, 사이즈가 0보다 크면 true


-t <fd>: FD가 존재하고 현재 터미널에 연결되어 있으면 true


FILE1 -nt FILE2: FILE1이 FILE2보다 수정시간이 newer면 true


FILE1 -ot FILE2: FILE1이 FILE2보다 수정시간이 older면 true



정수

부호C stylereturn예제
-eqequal==0 (true)
1 (false)
if [ $NUM1 -eq $NUM2 ]; then ...
-nenot equal!=0 (true)
1 (false)
if [ $NUM1 -ne $NUM2 ]; then ...
-leless equal<=0 (true)
1 (false)
if [ $NUM! -le $NUM2 ]; then ...
-gegreater equal>=0 (true)
1 (false)
if [ $NUM! -ge $NUM2 ]; then ...
-ltless than<0 (true)
1 (false)
if [ $NUM! -lt $NUM2 ]; then ...
-gtgreater tan>0 (true)
1 (false)
if [ $NUM! -gt $NUM2 ]; then ...

-eq: 정수 비교해 같으면 true

  • [ VAR1 -eq VAR2 ] : 두 정수가 같니?
    주의: 문자열비교 XX!!!



==: 정수 비교해 같으면 true

  • 정수에도 사용된다.

&&

&&: 조건식 외부

[ 조건식A ] && [ 조건식B ]: 조건식 A true, 조건식 B true 일때 동작

  • 조건식 [ ] 외부에서 사용
  • [ 조건 A ] && [ 조건 B ]
    조건 A True -> 조건 B 실행 O
    조건 A Flase -> 조건 B 실행 X

&& 로 연결할 때 주의점!!

  • ';' 로 연결하면 무조건 실행된다.
  • 실행의 흐름

-a: 조건식 내부

[ 조건식A -a 조건식B ]: 조건식 A와 B 모두 True 시 True (&&)

  • 조건식 [ ] 내부에서만 사용 가능하다.

||

||: 조건식 외부

  • [ 조건 A ] || [ 조건 B ]
    조건 A Flase -> 조건 B 실행 O
    조건 A True -> 조건 B 실행 X

-o: 조건식 내부

[ 조건식A -o 조건식B ]: 조건식 A와 B 둘 중 하나만 True 시 True (||)


-v : 변수 존재 test

  1. 변수가 존재하는지 (unset 안되었는지) 체크한다.
    1-1. 존재하지 않는 상태(unset 상태) 면, 1
    1-2. 그 외에는 0을 리턴
  2. set 변수를 검사해, set 되어 있으면 0을 반환한다.

    2-1. 근데, unset 명령을 먹여도 $?=0, set을 출력한다.

    2-2. export 한 환경 변수는 애초에 set 변수가 아니라서 아래와 같이 1을 리턴하고 unset 상태라고 말한다.
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글