쉘 스크립트에서는
파일
과 관련한 조건문을 작성할 수 있습니다.
비교 방법 | 설명 |
---|---|
-e filePath | 단순히 경로가 존재(exist)하는지 |
-d filePath | 경로가 존재하고, 디렉토리(directory)인지 |
-f filePath | 경로가 존재하고, 파일(file)인지 |
-r filePath | 경로가 존재하고, 읽을 수(read) 있는지 |
-s filePath | 경로가 존재하고, 비어있지 않은지 |
-w filePath | 경로가 존재하고, 쓸 수(write) 있는지 |
-x filePath | 경로가 존재하고, 실행(execute)할 수 있는지 |
-O filePath | 경로가 존재하고, 현재 사용자가 소유(Owner)한 것인지 |
-G filePath | 경로가 존재하고, 기본 그룹(Group)이 현재 사용자의 기본 그룹과 같은지 |
location
변수에 디렉토리까지의 경로를 할당합니다.location
변수값의 경로가 디렉토리이면 디렉토리 내에 test
파일이 있는지 따져봅니다.test
파일이 있다면, 해당 파일에 >>
출력 리다이렉트를 통해 현재 날짜와 시간(date
)를 입력합니다.test
파일이 없다면, echo
문구를 출력하고 끝냅니다.location
변수값의 경로가 존재하지 않거나 디렉토리가 아니라면, echo
문구를 출력하고 끝냅니다.$ cat test1
#!/bin/bash
location=$HOME/devops/Script
file_name=test
if [ -d $location ]
then
echo "There is $location directory"
echo "Checking on the file, $file_name"
if [ -f $location/$file_name ]
then
echo "Update Current Date..."
date >> $location/$file_name
else
echo "File doesn't exist"
echo "Nothing to update"
fi
else
echo "Directory doesn't exist"
echo "Nothing to update"
fi
스크립트를 실행하면 디렉토리는 존재하지만 파일이 없기 때문에 File doesn't exist
문구가 나오는 것을 볼 수 있습니다.
$ ./test1
There is /home/hyeob/devops/Script directory
Checking on the file, test
File doesn't exist
Nothing to update
test
라는 파일을 생성해주고 다시 스크립트를 실행시켜 보겠습니다.
$ touch test
$ ./test1
There is /home/hyeob/devops/Script directory
Checking on the file, test
Update Current Date...
$ cat test
Wed 13 Apr 2022 08:17:34 AM UTC
test
파일에 내용이 추가되었습니다.
내용을 확인해보면 현재 날짜(date
)가 추가된 것을 확인할 수 있습니다.
/etc/shadow
는 사용자들의 암호가 저장되어 있기 때문에 일반 사용자는 읽을 수가 없습니다.
이것을 활용한 예제를 보겠습니다.
$ cat test1
#!/bin/bash
file_name=/etc/shadow
if [ -f $file_name ]
then
echo "There is a $file_name"
echo "Checking on the file, $file_name"
if [ -r $location/$file_name ]
then
echo "I can read $file_name"
cat /etc/shadow
else
echo "I can't read $file_name"
fi
else
echo "$file_name doesn't exist"
fi
$ ./test1
There is a /etc/shadow
Checking on the file, /etc/shadow
I can't read /etc/shadow
/etc/shadow
파일은 존재하지만 읽을 수가 없기 때문에 echo "I can't read /etc/shadow"
가 실행된 것을 볼 수 있습니다.
test
라는 빈 파일을 생성하고 진행해보겠습니다.
$ touch test
test
파일이 있는지 확인하고,$ cat test1
#!/bin/bash
file_name=$HOME/devops/Script/test
if [ -f $file_name ]
then
echo "There is a $file_name"
echo "Checking on the file, $file_name"
if [ -s $file_name ]
then
echo "$file_name is not empty"
else
echo "$file_name is empty"
echo "Deleting empty file..."
rm $file_name
fi
else
echo "$file_name doesn't exist"
fi
$ ./test1
There is a /home/hyeob/devops/Script/test
Checking on the file, /home/hyeob/devops/Script/test
/home/hyeob/devops/Script/test is empty
Deleting empty file...