linux

sh 문법 (ing)

chanchand 2023. 12. 24. 10:22
반응형

#!/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