조건문, 반복문, 연산자
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)
Leave a comment