728x90
[Shell Script] 파일 내용 여부에 따라 명령어 실행하기
명령어를 실행할 때, 로그인을 해서 토큰을 받아와야하는 경우나, 매 시간마다 인증을 받아야 하는 경우에
매번 스크립트를 실행할 때마다 인증을 받기는 매우 귀찮다.
그래서 토큰 파일에 내용이 있으면 로그인 명령을 실행하고,
그렇지 않으면 다음 커맨드를 실행하는 스크립트를 생성하기로 결정😉
처음엔 파일의 크기를 이용하는 방식으로 짰음
token_file="~/token_file"
if [[ ! -s "$token_file" ]]; then
$command_to_run
else
echo "File exists. Skipping command execution."
fi
위 스크립트에서 ! -s 조건은 파일이 존재하고 크기가 0보다 큰지를 확인한다.
파일이 있는 경우엔 else 블록 안의 내용이 실행되어 명령어 실행이 건너뛰고,
파일 내용이 없는 경우엔 if 블록 안의 내용을 실행하여 명령어를 실행한다.
하지만 위 스크립트를 실행했을 땐, 파일 내용이 있거나 없거나 무조건 if문 블록 안이 실행됐다 😂
위 방식은 과감하게 버리고
Cat으로 파일을 조회했을 때, 조회가 되면 명령어를 skip하고,
조회가 되지 않으면 명령어를 실행하는 코드를 새로 짰음
token=$(cat ~/token_file)
if [[ -z "$token_file" ]]; then
echo "File '~/.vault-token' is empty or does not exist. Running command..."
$command_to_run
else
echo "Token fike has content. Skipping command execution."
fi
아래와 같은 두 방식을 사용하면, 명령어 실행 결과가 변수에 저장된다.
token=$(cat ~/token_file)
token=`cat ~/token_file`
-z 옵션과 -n 옵션은 쉘 스크립트에서 문자열의 길이를 확인하기 위해서 사용되는 조건이다
- -z : 문자열의 길이가 0인지 확인, 문자열이 비어있는지 체크
- -n : 문자열의 길이가 0보다 큰지 확인, 문자열이 비어있지 않은지를 체크
두 옵션 모두 사용이 가능한데 나는 -z 옵션을 사용하여 스크립트를 구성했다.
위 코드로 스크립트를 실행하니 원하는 대로 잘 작동했다.
나 같은 경우엔 토큰 정보가 하나만 저장이 되고 시간이 지남에 따라 만료되기 때문에
위와 같은 방식으로 사용이 가능했지만, 토큰 정보가 여러개가 저장된다면 어떻게 해야할 지 조금 더 고민 해봐야 할듯 🤔
반응형
'🌏 OS > Linux' 카테고리의 다른 글
[Shell Script] 파일의 변경 시간에 따라 조건 설정하기 (0) | 2023.07.10 |
---|---|
[Shell Script] 명령어 실패 시 재시도하기 (0) | 2023.07.08 |
[Linux] SSH 설정 변경, 포트 변경 (0) | 2023.06.11 |
[Linux] 시스템 로그 (0) | 2023.05.25 |
[Linux] 볼륨 파티션, 포맷, 마운트 (2) (0) | 2023.05.21 |