#!/bin/[쉘]
[쉘] : bash, sh, tcsh 등
해당 파일을 작성한 쉘로 실행시키겠다는 의미이다.
#는 주석이지만, #!/bin/~ 은 주석으로 해석되지 않는다.
변수
선언 : 변수명 = 데이터
사용 : $변수명
- 지역변수
$$ : 쉘 프로세스 번호
$0 : 쉘 스크립트 이름
$1 - $9 : 명령줄 인수
$* : 모든 명령줄 인수 리스트
$# : 인수 개수
$? : 최근 실행한 명령어 종료 값, 0:성공, 1-125:에러, 126:파일 실행가능X, 128-255:시그널 발생
- 옵션
-z : 변수가 비어있다면 True, 문자열일 경우 [[]]로 검사
-n : 변수가 비어있지 않으면 True
리스트
선언 : 변수명 = (데이터1 데이터2)
사용 : ${변수명[인덱스번호]}
ex) daemons = ("httpd" "mysqld" "vsftpd")
#!/bin/bash
daemons = ("httpd" "mysqld" "vsftpd")
echo ${daemons[1]} # mysqld
echo ${daemons[*]} # 배열의 모든 데이터 출력
echo ${daemons[@]} # 배열의 모든 데이터 출력
echo ${#daemons[@]} # 배열 크기 출력
filelist = ($(ls))
echo ${filelist[*]} # filelist 모든 데이터 출력
echo $daemons[1] # daemons 읽고, [1]은 데이터로 인식하여 httpd[1] 출력
연산자
expr : 숫자 계산
expr를 사용하는 경우 `를 사용해야 한다.
연산자 *와 괄호 앞에는 역 슬래시를 사용해야 한다.
연산자와 숫자, 변수, 기호 사이에는 space를 넣어야 한다.
#!/bin/bash
num = `expr\( 3 \* 5 \) / 4 + 7` # (3*5)/4+7
조건문
if [조건]
then
명령문
else
명령문
fi
if [조건]; then 명령문; fi
== : -eq
!= : -ne
< : -lt
<= : -le
> : -gt
>= : -ge
조건문
for 변수 in 변수값1 변수값2
do
명령문
done
while [조건문]
do
명령문
done
파일 검사
파일의 검사 여부에 따라 참 또는 거짓이 반환
-e : 파일이 존재하면 참
! -e : 파일이 존재하지 않으면 참
-d : 디렉터리면 참
-h : 심볼릭링크면 참
-f : 일반 파일이면 참
-s : 파일 크기가 0이 아니면 참
-u : suid가 설정되어 있으면 참
-r : 읽기 가능하면 참
-w : 쓰기 가능하면 참
-x : 실행 가능하면 참
출력
ex)
cat << EOF
--------------------------------------------------
Linux CentOS 7 64-bit Shell Script
--------------------------------------------------
EOF
<< 와 함께 원하는 문자열을 기재하여 사용한다.
stdin을 cat 명령어로 받고 redirection을 통해 파일의 stdout 내용을 출력한다.
문자열 분할
- IFS
IFS(Internal Field Separator) 변수를 사용하여 문자열을 분할한다.
IFS는 문자열에서 구분하는 데 사용되는 구분자를 정의한다.
ex)
string='/etc/test1/test2'
IFS='/' read -ra check <<< $string
echo ${check[@]} # etc test1 test2
- Bash 내장 기능
Bash 내장 기능을 이용해 문자열을 치환할 수 있다.
str='"/etc/test"'
str2=${str//\"}
문자열 내의 모든 따옴표가 제거된다.
'linux' 카테고리의 다른 글
NFS(네트워크 파일 시스템) (0) | 2023.12.24 |
---|---|
systemctl 명령어 (0) | 2023.12.23 |
[Error] 칼리리눅스 네트워크 설정 (0) | 2023.11.01 |
$ 매개변수 (특수 변수) (0) | 2023.09.20 |
curl (0) | 2023.08.08 |