2023.04.04

if 문

if 문은 아래와 같이 [] 안에 조건문을 두고 then 을 통해서 실행시킬 코드를 작성한다. 아래 처럼 then을 한 줄 내려서 작성하는 게 기본이지만, ; 를 이용해서 if 줄에 같이 작성할 수 있다.

if [ 조건문 ]
then
	echo "test"
fi

# 축약해서...
if [ 조건문 ]; then
	echo "test"
fi


대 괄호 vs 대대 괄호

조건문을 알아보기 전에 대 괄호 [] 대신 [[ ]] 를 사용할 수도 있다. 이 둘의 차이는 Stack_Overflow 에도 잘 나타나 있는데, 그냥 대 괄호의 경우 내부를 명령어로 처리를 하고, 대대 괄호의 경우 키워드로 처리하여서 대 괄호랑 다른 방식으로 처리가 된다. 요약 하자면, [] 의 경우 내부의 단어를 분리하는 과정을 가지기 때문에 공백이 포함된 문자열 역시 분리 시키기 때문에 오류가 나는 경우가 있다. [[ ]] 는 키워드로 인식하기 때문에 공백이 있어도 분리하지 않는다는 것이다. 정확한 것은 해당 링크를 참고하자.


예시

일반 대괄호에 $str 을 바로 넣는 경우 [: too many arguments 에러가 나옴. 단어를 분리해서 파라미터로 받기 때문에 해당 에러가 나오는 것.

str="apple is good!"
if [ $str == "apple is good!" ]; then
	echo "test"
fi

대대 괄호로 바꾸면 에러는 안 나온다.

str="apple is good!"
if [[ $str == "apple is good!" ]]; then
	echo "test"
fi


조건식

if 문 내부에… 조건문으로 아래와 같이 작성할 수 있다.

비교 연산자

# 비교 연산자
-z $str : 문자열의 길이가 0, null 이면 true
-n $str : 문자열의 길이가 0, null 이 아니면 true

$num1 -eq $num2 : num1 == num2 
$num1 -ne $num2 : num1 != num2 
$num1 -gt $num2 : num1 > num2
$num1 -ge $num2 : num1 >= num2
$num1 -lt $num2 : num1 < num2
$num1 -le $num2 : num1 <= num2

-eq 대신 == 으로 작성하여도 문제는 없다. (다른 비슷한 것도 마찬가지)


논리 연산자

조건식 -a 조건식 : and 연산자 && 로 작성 가능
조건식 -o 조건식 : or 연산자


파일 관련 연산

-e $file1 : 파일이 존재하면 true
-s $file1 : 파일의 크기가 0 보다 크면 true

-d $file1 : 파일이 디렉토리면 true
-f $file1 : 파일이 디렉토리가 아닌 일반 파일이면 true

-r $file1 : 파일이 읽기 가능하면 true
-w $file1 : 파일이 쓰기 가능하면 true
-x $file1 : 파일이 실행 가능하면 true

$file1 -nt $file2 : 1 이 2 파일보다 최신파일이면 true
$file1 -ot $file2 : 1 이 2 보다 과거의 파일이면 true

이 외에도 다양한 연산자가 있다.


for 문

아래와 같이 작성해서 출력할 수 있다.

for var in 1 2 apple 3
do
    echo $var
done

file을 넣어서 한 줄씩 출력할 수도 있다.

for var in $file
do
    echo $var
done


범위 지정

범위를 지정하는 경우… {start..end} 로 작성할 수 있다. bash 버전이 3이상이라면 가능…!

for var in {1..3}
do
    echo $var
done

올라가는 값 설정하는 경우.. {start..end..index}, bash 버전이 4이상이라면 가능! 또는 아래처럼 작성할 수 있다.

for var in {1..10..2}
do
    echo $var
done

# 또는
for var in $(seq 1 2 10)
do
    echo $var
done

이 경우 2씩 올라간다. (ex: 1, 3, 5, 7, 9)



Categories:

Updated:

Leave a comment