쉘 스크립트 - 2

2021. 6. 6. 02:17

11. 조건문
if문
 - 사용예
    if [ 조건식 ]
    then
      수행명령어
    elif [ 조건식 ]
    then
      수행명령어
    else
      수행명령어
    fi
 - 조건식 종류
    if [ $변수 연산자 $변수 ]: 두 변수를 비교시 사용
    if [ $변수 연산자 조건값 ]: 변수과 조건값 비교시 사용
    if [ 연산자 $변수 ]: 변수가 문자열이나 디렉토리일 경우
    if [ 조건식 ] 연산자 [ 조건식 ]: 여러 조건식 존재시(and, or)
  ** 조건값, 변수간 비교연산할 경우 연산자 사이에 스페이스가 들어가야 한다
      ex) $변수=$변수 일 경우 조건식이 아닌 대입연산으로 인식한다.
  ** 대괄호([, ]) 사이에 스페이스가 반드시 들어가야 인식한다

switch-case문
 - 사용예
     case $변수 in
      조건값1)
       명령어
      ;;
      조건값2)
       명령어
      ;;
      *)
       명령어
      ;;
esac
  ** c언어의 switch문과 비교하자면, ';;'를 break, '*)'는 default:로 볼 수 있고 esac는 case문의 끝인데 case 문자를 거꾸로 썼다.(if문처럼)

 


12. 반복문
for문
 - for문은 2가지 방식이 있다.
 - 사용예 1 : 전통적인 c언어 방식과 유사
     for (( 변수=초기값; 조건식; 증가값 ))
     do
      명령어
     done
 - 사용예 2 : c++언어 방식과 유사
     for 변수 in 범위
     do
      명령어
     done
** for문의 증감 변수는 미리 정의하지 않아도 된다
** 위의 범위란 리스트, 배열과 같이 연속된 숫자, 문자열등을 의미한다.
    ex) for num in {1..3} -> num이라는 변수를 for에서 정의했으며, 해단 변수가 1~3까지 차례로 증가하며 명령어가 실행됨
    ex2) ary={"a", "b", "c"}
         for ch in ${ary[@]} -> @대신 *를 사용해도 무방하다.

while문
 - 사용예
     while [ $변수 연산사 $변수 ]
     do
      명령어
     done
 ex) while [ $num -lt 3 ] -> num이 3보다 작을경우 명령어 실행
     do
      명령어
      num$((num+1)) -> $(())를 사용해 변수를 연산하고 대입할 수 있다.
     done

** 아직 조금 헷갈리는데 괄호를 대략적으로 이해하자면
   []: 조건문, (): 음수표현, {}: 변수구분, 범위표현, $(()): 변수연산, 리다이렉션(리눅스의 쉘명령어: <, >, >>, | 등)과 구별하기 위해 사용


13. 연산자
문자열 연산자
 -z: 문자열 길이가 0이면 참, ex) if [ -z $변수 ]
 -n: 문자열 길이가 0이 아니면 참, ex) if [ -n $변수 ] -> 예제대로 했을 때 안된다?

비교 연산자
 - 정수 비교 연산자
    -eq: 변수1과 변수2의 값이 같으면 참(=와 동일)
    -ne: 변수1과 변수2의 값이 다르면 참(!=와 동일)
    -gt: 변수1의 값이 변수2의 값보다 클 경우
    -ge: 변수1의 값이 변수2의 값보다 크거나 같을 경우
    -lt: 변수1의 값이 변수2의 값보다 작을 경우
    -le: 변수1의 값이 변수2의 값보다 작거나 같을 경우
      ex) if [ $변수 연산자 $변수 ]
    >: 변수1의 값이 변수2의 값보다 클경우
    >=: 변수1의 값이 변수2의 값보다 크거나 같을 경우
    <: 변수1의 값이 변수2의 값보다 작을 경우
    <=: 변수1의 값이 변수2의 값보다 작거나 같을 경우
      ex) if (( $변수 연산자 $변수 ))
 ** 문자로 된 연산자와 기호로 된 연산자의 사용법이 다르다

 - 문자열 비교 연산자
    =, ==, !=: 동일한 문자열 비교
    >, <: 아스키 코드를 기준으로 비교한다. 기존의 문자열 비교함수와 동일하다고 생각하면 된다.
          또한 리다이렉션 기호와 동일하기 때문에 사용시 [[, ]]로 기호를 사용해야한다.
    ex) if [ $변수 == $ 변수 ], if [[ $변수 < $변수 ]]

논리 연산자
 -a: AND 연산, ex) if [ 조건식 -a 조건식 ]
 -o: OR 연산, ex) if [ 조건식 -o 조건식 ]
 &&: AND 연산, ex) if [ 조건식 ] && [ 조건식 ], if [[ 조건식 && 조건식 ]]
 ||: OR 연산, ex) if [ 조건식 ] || [ 조건식 ], if [[ 조건식 && 조건식 ]]

디렉터리 연산자
 -d: 변수가 디렉토리에 해당하면 참, ex) if [ -d $변수 ]
 -e: 변수가 디렉토리이거나 파일에 해당하면 참, ex) if [ -e $변수 ]

파일 연산자
 - 파일여난자는 파일의 소유권, 실행권한, 파일/디렉터리 구분에 사용한다. 예시는 생략
파일 비교 연산자
 변수가 파일의 유형을 가지고 있어야 한다
 -nt: 변수1이 변수2보다 최신파일이면 참, ex) if [ $변수1 -nt 변수2 ]
 -ot: 변수1이 변수2보다 과거파일이면 참, ex) if [ $변수1 -ot 변수2 ]
 -ef: 변수1이 변수2보다 동일파일이면 참, ex) if [ $변수1 -et 변수2 ]
** 파일이 심볼릭 링크의 유형일 경우 심볼릭 링크가 가리키는 타겟을 대상으로 한다.
  ex) 1.txt생성 이후 2.txt 생성, 이후 1.tx를 가리키는 a.txt 라는 심볼릭 링크 생성
         if [ "1.txt" -nt "2.txt" ] -> 거짓
         if [ "1.txt" -ot "2.txt" ] -> 참
         if [ "aa.txt" -nt "2.txt" ] -> 거짓
         if [ "aa.txt" -ot "2.txt" ] -> 참

14. 정규 표현식
 - 리눅스나 유닉스에 특별한 특징을 부여하는 문자와 메타문자들의 집합
 - '일치하는 텍스트를 찾기 위한 패턴'을 표현하기 위해 사용되는 특정 표준 텍스트 문법
 ** 메타문자: 원래의 정의에서 벗어난 특별한 의미로 사용하는 문자

POSIX 문법
 - '.', '?', '*', '{N}', '\' 등
POSIX 문자 클래스
 - 문자열 검색 시 사용. 문자클래스는 찾고자 하는 문자열의 유형을 의미한다.
 - '[:alpha:]', '[:blank:]', '[:graph:]', '[:space:]' 등

'Study > Shell' 카테고리의 다른 글

쉘 스크립트 - 4  (0) 2021.07.19
쉘 스크립트 - 3  (0) 2021.06.23
쉘 스크립트 - 1  (0) 2021.06.02
책으로 공부시작  (0) 2021.06.01
쉘 프로그래밍 - 1  (0) 2021.05.20

+ Recent posts