2019. 4. 3. 11:34ㆍstudy/centos 7 server & network
centos의 bash 쉘
# 명령어 [옵션][인자]
- 쉘 스크립트 프로그래밍
: c언어와 유사하게 프로그래밍이 가능하다.
: 변수, 반복문, 제어문 등의 사용이 가능하다.
: 별도로 컴파일하지 않고 텍스트 파일 형태로 바로 실행할 수 있다.
: 확장명은 *.sh
: 스크립트를 /usr/local/bin/ 디렉터리에 복사하고 755 권한을 주면 모든 사용자가 사용할 수 있다.
* 단, 이 작업은 보안상 root만 수행한다.
실행 방법
1.
[root@localhost ~] # sh [스크립트 파일]
2.
[root@localhost ~] # chmod +x [스크립트 파일]
[root@localhost ~] # ./[스크립트 파일]
ex) # name.sh
#!/bin/sh
echo "user's name : " $USERNAME
exit 0
$USERNAME : 현재 사용자 이름
1. 변수
: 사용하기 전에 미리 선언하지 않고, 변수에 처음 값이 할당되면서 자동으로 변수가 생성된다.
: 모든 변수는 문자열로 취급한다.
ex) test=1 > '1'이라는 문자열로 취급
[root@localhost ~] # test=1
[root@localhost ~] # echo $test+1
1+1
: 변수 이름은 대소문자를 구분해야한다.
: 변수를 대입할 때 = 좌우에 공백이 없어야 한다.
공백이 있을 경우
bash: test: =: unary operator expected 라는 오류가 뜬다.
: 공백이 있는 값을 하고 싶으면 " "으로 묶는다.
ex) test="hello world"
: $ 문자를 같이 출력하고 싶으면 \$를 사용한다.
[root@localhost ~] # echo "test \$USERNAME : " $USERNAME
test USERNAME : root
2. 숫자 계산
: 변수에 들어있는 값을 숫자로 해서 연산을 하려면 expr을 사용해야한다.
[root@localhost ~] # test=1
[root@localhost ~] # expr $test + 1
2
산술 : +, -, *, /, %
논리 : | , &
비교 : =, <, <=, >, >=, !=
*, & , | , > , < , ( , ) 같은 경우 특수문자로 사용된다.
따라서, 연산에 사용하려면 \ 문자를 앞에 붙여서 사용해야한다.
3. 파라미터 변수
: $0 , $1 , $2 .... 의 형태를 가진다.
: 전체 파라미터는 $* 로 표현
# parm.sh
#!/bin/bash
echo "file name : " $0
echo "first parameter : " $1
echo "entire parameter : " $*
# 결과
[root@localhost ~] # ./parm.sh one two
file name : ./parm.sh
first parameter : one
entire parameter : one two
4. if
- 형식
if [ 조건 ]
then
참일 경우 실행
fi
* [ 조건 ] 처럼 [ ]와 조건 사이에 빈칸이 꼭 들어가야 한다.
4.1. 조건 (문자열)
문자열 = 문자열 : 두 문자열이 같으면 참
문자열 != 문자열 : 두 문자열이 같지 않으면 참
-n 문자열 : 문자열이 널이 아니면 참
-z 문자열 : 문자열이 널이면 참
4.2. 조건 (값, 수식)
A -eq B : A, B가 같으면 참
A -ne B : A, B가 같지 않으면 참
A -gt B : A > B이면 참
A -ge B : A >= B이면 참
A -lt B : A < B이면 참
A -le B : A <= B이면 참
4.3. 조건 (파일)
-d : 파일이 디렉터리면 참
-e : 파일이 존재하면 참
-f : 파일이 일반 파일이면 참
-g : 파일에 set-group-id가 설정되면 참
-r : 파일이 읽기 가능하면 참
-s : 파일 크기가 0이 아니면 참
-u : 파일에 set-user-id가 설정되면 참
-w : 파일이 쓰기 가능하면 참
-x : 파일이 실행 가능하면 참
5. case ~ esac
- 형식
case 변수 in
pattern [ | pattern ... ) ~~ ;;
. . .
esac
# case.sh
#!/bin/bash
echo "input : "
read input
case $input in
start)
echo "input start"
stop)
echo "input stop"
*)
echo "no"
esac
: 사용자 입력값을 받아서 start이면 "input start"를, stop이면 "input stop"을, 그 외이면 "no"를 출력한다.
6. for
- 형식
for 변수 in 반복 조건
do
. . .
done
* 반복 조건에 1, 2, 3.. 또는 $ls 등 여러가지 조건이 들어갈 수 있다.
# for.sh
#!/bin/bash
for i in 1 2 3 4 5
do
echo $i
done
: 1부터 5까지 출력한다.
7. while
- 형식
while 값1 조건 값2
do
. . .
done
*이때 사용되는 조건은 if문에서 사용되는 조건과 같다.
# while.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
echo $i
i=$(expr $i + 1)
done
: 1부터 5까지 출력한다.
8. until
- 형식
untile 값1 조건 값2
do
. . .
done
: while과 다르게 조건이 참이기 전까지 반복
ex)
1부터 5까지 출력하는 프로그램을 짤 때,
until [ $i -gt 5 ] 이다.
( i가 5보다 크기 전까지 )
+ break, continue, exit
break : 반복문을 종료한다.
continue : 반복문의 조건식으로 돌아간다.
exit : 해당 프로그램을 완전히 종료한다.
9. 함수
- 형식
함수이름 ()
{
. . .
}
: 보통 () 안에는 아무것도 쓰지 않는다.
: 대신, $1, $2.... 형태로 파라미터를 받아서 사용한다.
- 함수 호출
함수 이름 [인자1] [인자2] . . .
# function.sh
#!/bin/bash
sum()
{
expr $1 + $2
}
sum 1 2
: 인자로 넘겨준 두 값을 더해서 출력한다.
10. set, $(명령어)
10.1. $(명령어)
: 리눅스 명령어의 결과를 변수에 저장하기 위해서 $(명령어) 형식을 사용한다.
# $.sh
#!/bin/bash
one=$(expr 1 + 1)
echo $one
: expr 1 + 1의 결과를 변수 one에 저장하고 출력한다.
10.2. set
: 명령어의 결과를 파라미터로 사용하기 위해서 set과 함께 사용한다.
# set.sh
#!/bin/bash
set $(ls)
echo $3
: ls의 결과 가져와서 3번째의 값을 가져온다.
ex) ls의 결과가 a, b, c이면 c를 출력한다.
'study > centos 7 server & network' 카테고리의 다른 글
[centos] ssh (0) | 2019.04.09 |
---|---|
[centos] telnet (0) | 2019.04.09 |
[centos] 쿼터 (0) | 2019.03.31 |
[centos] 하드디스크 (0) | 2019.03.26 |
[centos] 서비스 (0) | 2019.03.25 |