오늘은 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
이를 이용해서 사칙 연산에 배열의 갯수도 사용해서 연산해볼 수도 있습니다!