리눅스 쉘 스크립트 조건문, 파일의 존재 여부, 사칙연산, 배열의 사용


오늘은 NAS의 shell 스크립트 몇가지를 수정하면서 찾아본 정보들에 대해 기록해봅니다.

조건문

조건문은 대괄호 [ ] 안에 넣어 작성합니다. 등호(=)나 부등호(>)도 사용 가능합니다.

if [ ps | grep -c text > 1]; then echo 1; fi

이는 프로세스에서 text가 포함 된 항목이 1개 초과인 경우 1을 출력한다는 조건문이 됩니다. []에 들어가는 조건문은 반복문에서도 사용할 수 있습니다.

while [ ps | grep -c text > 1]; do echo 1; done

프로세스에서 text가 포함된 항목이 한개 초과인 동안 1을 출력합니다.

파일, 폴더 존재 유무

대괄호 안에 넣어 사용합니다. 자주 사용하는 exist, file, directory의 존재 유무를 사용하는 방법은 아래와 같습니다.

if [ -e /share/Web/index.php ]
then
    echo 1
fi

이 글은 /share/Web 안에 index.php가 존재하면 echo 1을 수행합니다. -d 나 -f를 넣으면 /share/Web/index.php가 디렉토리인지 파일인지에 따라 결과가 달라질것입니다.

-d FILE
    파일이 존재하고 그 파일이 폴더인지 체크
    FILE exists and is a directory
-e FILE
    파일이 존재 하는지 체크
    FILE exists
-f FILE
    파일이 존재하고 보통 파일인지 체크
    FILE exists and is a regular file

많이 사용하는 것들은 위 세가지가 아닐까 싶습니다. 하지만 그 외에 검사 옵션들이 많이 있습니다.

-b FILE
    파일이 존재하고 특별한 파일인지 체크
    FILE exists and is block special
-c FILE
    파일이 존재하고 특수문자가 있는지 체크
    FILE exists and is character special
-g FILE
    파일이 존재하고 group ID 로 설정 되었는지 체크
    FILE exists and is set-group-ID
-G FILE
    FILE exists and is owned by the effective group ID
-h FILE
    파일이 존재하고 symbolic link 파일인지 확인
    FILE exists and is a symbolic link (same as -L)
-k FILE
    FILE exists and has its sticky bit set
-L FILE
    파일이 존재하고 symbolic link 파일인지 확인
    FILE exists and is a symbolic link (same as -h)
-O FILE
    파일이 존재하고 owner 가 유효한지 확인
    FILE exists and is owned by the effective user ID
-p FILE
    파일이 존재하고 그 파일이 pipe 인지 확인
    FILE exists and is a named pipe
-r FILE
    파일이 존재하고 read 가능한 파일인지 확인
    FILE exists and read permission is granted
-s FILE
    파일이 존재하고 0 size 파일이 아닌지 체크
    FILE exists and has a size greater than zero
-S FILE
    파일이 존재하고 그 파일이 소켓인지 확인
    FILE exists and is a socket
-t FD  file descriptor FD is opened on a terminal
-u FILE
    FILE exists and its set-user-ID bit is set
-w FILE
    파일이 존재하고 쓰기 가능한 파일인지 확인
    FILE exists and write permission is granted
-x FILE
    파일이 존재하고 실행 가능한 파일인지 확인
    FILE exists and execute (or search) permission is granted

사칙 연산

shell에서는 연산문을 사용해도 연산으로 처리 되지 않습니다.

k=60/3
echo $k

위와 같은 코드의 결과는 아쉽게도 60/3입니다.

계산은 let으로 수행할 수 있습니다.

let k=50/3
echo $k

결과는 16으로 소숫점은 버려집니다.

배열

배열 선언에는 소괄호를 이용합니다. 배열을 사용할 때는 중괄호와 대괄호를 이용합니다. 배열의 갯수를 셀때는 #을 이용합니다.

k=(1 2 34 5)
echo ${k[@]}
echo ${#k[@]}

결과는 아래와 같습니다.

1 2 34 5
4

이를 이용해서 사칙 연산에 배열의 갯수도 사용해서 연산해볼 수도 있습니다!

Ads Blocker Image Powered by Code Help Pro

광고 차단 감지됨!

닫기를 누르면 이용하실 수 있지만, 광고 차단은 해제해주시면 좋겠습니다.
Powered By
100% Free SEO Tools - Tool Kits PRO