-
[산대특] 쉘 프롬프트 문법[산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정/Linux 2024. 9. 11. 18:42
0911
수업 초반 어제 못했던 중요한 실습인 Puppet 성공함.
변수끼리의 수식계산은 `expr ~` | bc 를 이용.
▪ +, -, *, /, 그리고 %(나머지) 기호 전후에는 빈 공간 필수
▪ 곱하기 *는 와일드 문자(*)와 동일하므로 \를 사용해서 \* 처럼 해야한다 (하지만 최근 버전은 그냥 * 해도 된다).
▪ 괄호도 \( 과 \)를 사용해야 하고, ( 와 ) 전후에도 빈 공간이 있어야 한다는 규칙이 있다.
bc 는 C로 작성된 프로그램도 불러서 사용할 수 있다.
Shell Script 에서는 python 프로그램을 넣어 작업할 수 있다.
사용자 입력을 받을 때에는 read() 함수를 사용한다.
parameter variable 파라미터 변수
쉘 스크립트를 실행할 때 인자(argument) 를 주어서 스크립트 내 변수의 대입시켜서 실행되게 할 수 있다.
이 때 입력하는 외부 인자들을 ‘파라미터 변수’
쉘 프로그램 안에서 차례로 $0, $1, $2, … 변수 명의 값으로 대입된다.
$*은 모든 인자를 다 보이고,
$#은 인자의 개수를 보이라는 의미.
상수(constant)
메모리 공간 A라는 주소에 저장된 값 10을 변경시키지 않고 사용한다면
변수(variable) 대신 상수(constant)로 처리
'readonly 상수_명' 혹은 'declare -r 상수_명'형식으로 상수를 선언.
주로 문자열이나 해당 스크립트 내에서 고정된 값을 유지시켜야 할 때 상수를 사용한다.
배열(array)
같은 종류의 변수(문자, 숫자, 문자열, ...)를 여럿 사용할 때 사용, 보통 '배열_명=( 값1 값2 값3 )' 식으로 사용.
▪ ${배열_명[배열_번호]} 해서 개별 요소나,
▪ ${배열_명[@]} 해서 모든(그룹) 요소,
▪ ${배열_명[*]} 해서 포인터(메모리 주소) 요소에 접근할 수 있다.
배열의 첫 번째 요소는 인덱스[0]부터 시작
배치(batch) 파일처럼 명령어를 나열시켜서 쉘 스크립트로 순차적으로 실행 가능.
배치 파일 : MS-DOS나 Windows 환경에서 .bat 또는 .cmd 확장자를 가진 스크립트 파일
쉘 스크립트도 고급 프로그래밍 가능
=> C, JAVA, Python 에서의 조건문, 제어문, 반복문 사용 가능.
쉘 스크립트에서의 주석(remark) 처리는
# 한 줄 주석
: <<'END'
Hello,
This is a multiple lines...
for shell script remark
END 해서 여러 줄 주석으로 처리해준다.
: <<'END'와 같은 Here Document 구문에서 사용되는 END는 원하는 대로 다른 단어로 변경할 수 있습니다.
요점: << 뒤의 단어와 주석의 끝 부분/줄 의 단어가 동일해야 한다는 것.
조건문
조건에 따라서 실행되는 문을 작성할 때 사용된다.
a) IF (~ ELSE)문
주어진 조건을 비교해서 결과가 참이나 거짓이냐에 따라서 실행할 명령어를 써주면 된다.
=>첫 번째 if [ 조건1 ]이 참이면 if 아래의 실행문1이 실행되고,
거짓이면 다음에 있는 elif [ 조건2 ]를 봐서 참이면 실행문2가 실행되고,
[ 조건1 ]과 [ 조건2 ]가 모두 거짓이면 최종적으로 else 이하의 실행문3이 실행되게 된다.
조건이 하나면 'elif ~ 실행문2' 까지 생략해도 된다.
[ ~ ]에서 [ 과 ] 전후에 반드시 한 칸이 띄어져 있어야 한다.
그리고 if 문 안에 도 다른 if 문이 들어 갈 수도 있다. <=중첩된(nested) if-문
① 조건연산자 -d 디렉터리 디렉터리가 있으면 참 -e 파일 파일이 있으면 참 -f 파일 일반 파일이면 참 -g 파일 set-group-id 설정이면 참 -r 파일 읽기 가능한 파일이면 참 -s 파일 크기가 0이 아니면 참 -w 파일 쓰기 가능한 파일이면 참 -u 파일 set-user-id 설정이면 참 -x 파일 실행 가능한 파일이면 참 -z 파일 !와 같은 의미로 부정 -n 파일 문자열이 있다면 ② 비교연산자 < A = 12 대입, A == B 같다, A != B 다르다 > [ $a -eq $b ] a와 b가 같다(equal) [ $a -ne $b ] a와 b가 다르다(negation) [ $a -gt $b ] a가 b 보다 크다(greater than) [ $a -lt $b ] a가 b 보다 작다(less than) [ $a -ge $b ] a가 b 보다 크거나 같다(grater equal) [ $a -le $b ] a가 b 보다 작거나 같다(less equal) [ $str1 == $str2 ] string1이 string2와 같다 [ $str1 != $str2 ] string1이 string2와 다르다 !str string이 아니라면(not) ③ 관계연산자 -a && A와 B가 모두 조건을 만족해야 참(and) -o || A와 B 중 하나만 만족하면 참(or) CASE 문
case 문은 여러 조건 중에서 맞는 조건을 만나면 해당 조건의 실행문을 수행하고 바로 프로그램을 벗어난다.
여러 상황에 맞게 조건을 세분화해서 각각 실행문을 지정.
Linux의 여러 서비스 데몬들이 이 구문을 주로 사용.
=>case 뒤에 조건을 넣고, 각 '조건 )' 아래 실행할 명령어를 한 줄에 하나씩 적은 뒤 ;;로 끝내고,
맨 마지막에는 어느 조건에도 해당되지 않을 때 실행되는 실행문을 '* )' 아래에 넣어준다.
그리고 데이터베이스나 빅데이터 분석에서도 case 문이 널리 쓰인다.
반복문 (for, while, until)
반복문은 반복적인 작업을 쉽게 처리할 때 사용되므로 매우 요긴하다.
a) FOR 문
for는 대표적인 반복문으로써 인자가 유효하게 존재하는 동안 반복적으로 실행문이 실행된다
=>'for (( 최초_값 ; 최종_값 ; 증감_연산자(++/--) ))' 형식을 주로 사용.
여기서 (( ~ ))로 괄호가 두 개인 것에 주의하고 [ ]에서처럼 (( 와 )) 사이에 한 칸 띄어야 한다.
for 문에서
for num in {1..10} 하면 1~10까지의 숫자이고
for num in {1..10..3} 하면 1~10까지 3식 건너뛰는 숫자이다.
b) While 문
조건이 참인 동안 실행문이 실행. 무한 루핑이 발생 소지가 많다.
c) UNTIL 문
while 문과 반대로 do ~ done 명령문이 먼저 실행되다가 until 조건에 맞는 순간 실행을 끝낸다.
일단 한 번은 무조건 실행한 뒤 나중에 조건을 판단하기 때문에 적어도 한 번은 실행되는 특징.
대부분 While 문은 until 문으로 바꿀 수 있음.
** 합과 곱을 계산할 때에는 보통 초기값을 준다.
합: hap=0
곱: gop=1
d) 다음과 같은 제어 지시어는
반복문에서 흐름을 돌리거나 무한 루핑을 막는데 사용되는 제어문이다.
break 반복문을 빠져나가서 다음 문장을 실행하게 한다.
break 뒤에 exit 0이나 exit 1을 사용할 수도 있는데
이는 반복문을 끝내고 빠져나간다는 뜻으로
쉘 스크립트를 종료한다는 문장 끝의 exit 0와 다른 의미이다.continue 다시 조건식으로 가서 참/거짓 여부를 확인해서 실행여부를 판단한다. exit 해당 반복문을 빠져나가거나 스크립트를 종료한다. 생략 가능. return 함수를 호출한 곳에 (파라미터) 인자 값을 전해주는 일을 한다. SELECT 문
주로 메뉴를 생성할 때 사용되는 특수한 형식.
아래는 추가로 혼자 공부한 것 w.GPT
read와 cat의 차이
'[산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정 > Linux' 카테고리의 다른 글