리눅스 쉘 스크립트 사용법
- Linux(Ubuntu) Shell script (쉘스크립트) (linux shell)
//==================
* 인자 받기 (argument)
https://tecadmin.net/pass-command-line-arguments-in-shell-script/
$* = 모든 인자
$0 = 자신 이름
$1 = 첫번째 인자
//==========
* 비교
- 변수는 따옴표로 묶어야 한다.
if [ "$1" == "up" ]; then
echo up;
elif [ "$1" == "down" ]; then
echo down;
fi
//===============
* 시간
https://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/
#! /bin/bash
set -x #명령어 보이기
echo now=$(date +%y%m%d-%H%M%S)
//-----------------------------------------------------------------------------
* 현재 스크립트 파일 경로
https://stackoverflow.com/questions/59895/how-do-i-get-the-directory-where-a-bash-script-is-located-from-within-the-script
#!/usr/bin/env bash
파일 이름 = $(basename "$0")
폴더 경로 = $(dirname "$0")
실행 경로 = [$(pwd)
//-------------------------------------
* 문자열 비교
https://www.linuxtechi.com/compare-numbers-strings-files-in-bash-script/
var1 = var2 checks if var1 is the same as string var2
var1 != var2 checks if var1 is not the same as var2
var1 < var2 checks if var1 is less than var2
var1 > var2 checks if var1 is greater than var2
-n var1 checks if var1 has a length greater than zero
-z var1 checks if var1 has a length of zero
//-------------------------------------
* 숫자 비교
https://www.linuxtechi.com/compare-numbers-strings-files-in-bash-script/
num1 -eq num2 check if 1st number is equal to 2nd number
num1 -ge num2 checks if 1st number is greater than or equal to 2nd number
num1 -gt num2 checks if 1st number is greater than 2nd number
num1 -le num2 checks if 1st number is less than or equal to 2nd number
num1 -lt num2 checks if 1st number is less than 2nd number
num1 -ne num2 checks if 1st number is not equal to 2nd number
//-------------------------------------
* 문자열 합치기
$ X="String"
$ Y="Concatenation!"
$ echo "${X}${Y}123"
//-------------------------------------
* 명령실행 결과 값 비교
ex)
if [ $(redis-cli ping) == "PONG" ]; then
break
fi
//-------------------------------------
* 시간 문자열 출력
date +"%m-%d %H:%M:%S"
- 다른 문자열과 합쳐서 출력
echo "$(date +"%m-%d %H:%M:%S") - ok"
//-----------------------------------------------------------------------------
* if 사용법
#! /bin/bash
if [ "$1" != "" ]
then
echo $1
elif [ "$2" != "" ]
then
echo $2
else
echo "none"
fi
//-------------------------------------
- (줄임) 위 코드는 다음과 같음
if [ "$1" != "" ]; then echo $1
elif [ "$2" != "" ]; then echo $2
else echo "none"
fi
//-------------------------------------
if [ "$1" != "" ]; then echo $1
fi
- (줄임) 위 코드는 다음과 같음
[ "$1" != "" ] && echo $1
//-------------------------------------
if [ "$1" == "" ]; then echo "none"
else echo $1
fi
- (줄임) 위 코드는 다음과 같음
[ "$1" == "" ] || echo $1
//-----------------------------------------------------------------------------
* for 루프
for i in 1 2 3 4 5
do
if [ $i -gt 2 ]; then
break
fi
done
//-------------------------------------
for i in {1..10}
do
if [[ $i == '2' ]]
then
echo "Number $i!"
break
fi
echo "$i"
i=$((i+1)) # 증가
done
//-----------------------------------------------------------------------------
* while 루프
i=1
while [ $i -le 10 ]
do
echo $i
if [ $i -eq 5 ]
then
break
fi
i=$((i+1)) # 증가
done
//-------------------------------------
loop=0
while true
do
sleep 1
loop=$((loop+1)) # 증가
if [ $loop -gt 2 ]; then
break
fi
done
//-----------------------------------------------------------------------------
* function
https://www.tutorialspoint.com/unix/unix-shell-functions.htm
# 함수 정의
Hello () {
echo "Hello World $1 $2"
return 10
}
# 함수 사용
Hello Zara Ali
//-------------------------------------
- .bashrc 에서 사용예
funcFind() { [ $1 != "" ] && sudo find / -name "$1"; }
alias find3='funcFind'
alias find2='cmd_arg sudo find / -name'
cmd_arg(){
$@;
}
# /mnt를 제외하고 파일 검색
find2(){
if [ "$2" != "" ]
then
sudo find "$2" -path "/mnt" -prune -o -name "$1" -print
else
sudo find / -path "/mnt" -prune -o -name "$1" -print
fi
}
# 여러 폴더 제외하고 검색
# https://stackoverflow.com/questions/4210042/how-do-i-exclude-a-directory-when-using-find
# find . -type d \( -path ./dir1 -o -path ./dir2 -o -path ./dir3 \) -prune -o -name '*.txt' -print
//-----------------------------------------------------------------------------
* 파일에 문자열 쓰기
echo "Hello, World!" >> example.txt
//-----------------------------------------------------------------------------
실행중인 프로세스 카운트
sudo ps -aux | grep "프로세스 명령줄 이름" | wc -l
// ex)
ps_cnt=$(ps -aux | grep "artisan horizon" | wc -l)
if [ $ps_cnt -gt 1 ] ; then
echo $(date +"%m-%d %H:%M:%S") "horizon already running $ps_cnt"
exit
fi
//=============
//참고
http://faculty.salina.k-state.edu/tim/unix_sg/shell/variables.html#
'Code' 카테고리의 다른 글
VS Code - aleady running as asministrator 에러 해결방법 (0) | 2019.07.15 |
---|---|
[Git] 실수 되돌리기 (1) | 2019.07.14 |
프로그래밍 단위 테스트 방법 (0) | 2019.01.10 |
프로그래밍 언어 역사 (0) | 2016.05.19 |
[OpenCV]KalmanFilter, 마우스 움직임 예측하기 칼만필터 예제 (0) | 2014.01.07 |