본문 바로가기
서버 보안/셸 스크립트(shell script)

쉘 스크립트 프로그래밍에 쓰이는 명령어 정리

by 어깨 :) 2023. 4. 20.
728x90

1.  프로그래밍에 쓰이는 명령어 정리


• echo 명령어 : 인수로 지정된 문자열이나 환경변수를 출력 
- [-n] : 개행 없이 출력


• read 명령어 : 인수로 지정된 변수에 값을 입력받음.
• let / expr 명령어 : 수식 연산을 위한 명령어

 


2. 특수변수 / 매개변수 확장


- $? : 마지막으로 실행된 프로세스의 상태값을 나타냄 
- $0 : 현재 스크립트의 이름
- $1 : 첫 번째 인수
- ${#변수} : 문자열의 길이


ex) # echo ${#value} →  value=”333”이라면 3이 출력
- ${변수:위치} : 위치부터 문자열 출력 (0부터 시작)
ex) # echo ${value:3} → value=”string”이라면 ing 출력 

 

 

3. 여러 가지 함수들


• [조건문] if 문
 1) 형식 : if [ 조건 ] then 
              명령어
           elif [ 조건 ] then 
             명령어
          else
            명령어
          fi

 

 

아래는 예시입니다. 변수 x의 값에 따라 다른 명령어를 수행합니다.

조건이 참인 경우 echo 명령어로 문자열을 출력하고, 거짓인 경우 else 블록에 있는 명령어가 수행됩니다.

 

 

 

 

•조건문 작성법
- [ A -lt B ] : A가 B보다 작다
- [ A -eq B ] : A와 B가 같다
- [ A -qt B ] : A가 B보다 크다
- [ A –qe B ] : A가 B보다 크거나 같다 
- [ A -le B ] : A가 B보다 작거나 같다 
- [ A -ne B ] : A가 B와 다르다

 

→위의 예시

1. [ A -lt B ] : A가 B보다 작다
예시: 3 -lt 5 (3은 5보다 작으므로 True 반환)

 

2. [ A -eq B ] : A와 B가 같다
예시: "apple" -eq "apple" ("apple"과 "apple"은 같으므로 True 반환)

 

3. [ A -gt B ] : A가 B보다 크다
예시: 10 -gt 7 (10은 7보다 크므로 True 반환)

 

4. [ A -ge B ] : A가 B보다 크거나 같다
예시: 9 -ge 9 (9는 9보다 크거나 같으므로 True 반환)

 

5. [ A -le B ] : A가 B보다 작거나 같다
예시: 2 -le 2 (2는 2보다 작거나 같으므로 True 반환)

 

6. [ A -ne B ] : A가 B와 다르다

예시: "cat" -ne "dog" ("cat"과 "dog"는 다르므로 True 반환)

 

 

 

•[조건문] case 문
- 형식 : case 변수 in
                패턴 1) 명령어 ;; 
                패턴 2) 명령어 ;; 
                 …
               *) 명령어 ;;
         esac

 

 


- “ *) “ 은 아무 패턴과 일치하지 않을 때 수행되는 구간이다.

변수 fruit의 값이 apple인 경우 첫 번째 패턴이 일치하므로, echo "apple is red"가 실행됩니다. 반면, 변수 fruit의 값이 grape인 경우 *) 패턴에 일치하므로, echo "I don't know what grape is"가 실행됩니다.

 

 


• [반복문] for 문
- 형식 : for 변수 in 값 
            do
                명령어
           done


아래는 예시입니다. 변수 i에 1부터 5까지의 값이 대입되고, echo 명령어를 이용해 반복적으로 출력합니다.

출력 결과는 다음과 같습니다.

 

위와 같이 for 문을 이용하면 변수에 대입된 값을 바탕으로, 반복적으로 명령어를 실행할 수 있습니다.

 

 

 


• [반복문] while 문
- 형식 : while [ 조건 ] 
            do
                      명령어
           done



아래는 예시입니다. 변수 i에 초기값 1을 대입하고, while 문을 이용해 변수 i가 5보다 작거나 같은 동안 echo 명령어를 이용해 반복적으로 출력합니다. i 변수는 반복마다 1씩 증가합니다.

 

 

출력 결과는 다음과 같습니다.

위와 같이 while 문을 이용하면 조건식이 참(True)인 동안, 반복적으로 명령어를 실행할 수 있습니다.

 


• [반복문] until 문
- 형식 : until [ 조건 ] 
         do
                    명령어
        done

 


아래는 예시입니다. 변수 i에 초기값 1을 대입하고, until 문을 이용해 변수 i가 5보다 큰 동안 echo 명령어를 이용해 반복적으로 출력합니다. i 변수는 반복마다 1씩 증가합니다.

 

 

 

출력 결과는 다음과 같습니다.

 

위와 같이 until 문을 이용하면 조건식이 거짓(False)인 동안, 반복적으로 명령어를 실행할 수 있습니다.

 

 

 

4. 기타 명령어


1)  출력 명령어
• cut 명령어 : 파일에서 필드를 뽑아내서 출력
- [-f] : 잘라낼 필드를 지정
- [-d] : 필드를 구분하는 문자를 지정 
- [-c] : 잘라낼 곳의 글자 위치를 지정
ex) # cut -f 1,3,4 -d : /etc/passwd → /etc/passwd 파일에서 필드를 :로 구분하여 1,3,4번째 필드를 출력 
# cut -c 1-10 /etc/passwd →  /etc/passwd 파일에서 첫 번째 문자부터 10번째 문자까지만 출력


• more/less 명령어 : 내용이 많은 파일을 출력할 때 사용하는 명령어 
- [-f] / [SpaceBar] : 한 페이지 뒤로 이동
- [-b] : 한 페이지 앞으로 이동


• tail 명령어 : 파일의 내용을 뒷부분부터 출력 
- [-n] : 지정한 줄 만큼 출력


• head 명령어 : 파일의 내용을 앞부분부터 출력


• cat 명령어 : 파일의 내용을 화면에 출력 
- [-n] : 행 번호를 붙여서 출력
- [-b] : 행 번호를 붙여서 출력하되, 비어있는 행은 제외 
- [-s] : 비어있는 2개 이상의 빈 행은 하나의 행으로 출력 
- [-v] : 탭 문자와 End 문자를 제외한 제어 문자를 ‘^’로 출력 
- [-T] : 탭(tab) 문자(‘^’)를 출력
- [-E] : (End) 행마다 끝에 ‘$’ 문자를 출력

 

 

- [-A] : 모든 제어문자를 출력 
- 옵션 사용 예제

 

2)  find 명령어 
• 형식 : # find [검색 디렉터리] [옵션]
• 주요 옵션
- [-name] : 파일 이름으로 검색 
- [-perm] : 권한(permission)으로 검색
ex) # find / -perm -4000 →   루트 디렉터리 이하에 있는 권한이 최소 4000을 만족하는 파일을 검색 
ex) # find /etc -perm 777 →  /etc 디렉터리 이하에 있는 권한이 777인 파일을 검색
- [-user] : 사용자 이름으로 검색
- [-type] : 파일 종류로 검색 (d/f/l/s/…)
- [-exec] : 검색한 파일들에 대해 특정 명령을 수행
ex) # find / -name “*. c” -exec rm -rf {} \; →   루트 디렉터리 이하에 있는 파일 이름이. c로 끝나는 파일을 모두 삭제
- [-ok] : exec와 같은 기능을 수행하지만 명령 실행할 때마다 실행 의사를 물어봄. 
- [-mtime] : 파일이 마지막으로 수정된 날짜에 대해 검색을 수행
- [-atime] : 파일에 마지막으로 접근한 날짜에 대해 검색을 수행 
- [-ctime] : 파일이 마지막으로 권한이 변경된 날짜에 대해 검색을 수행
→  +n : n일 이전 / -n : 오늘부터 n일 전 사이 / n : 정확히 n일 전
ex) # find. -name “*. sh” -mtime +1 →   현재 디렉터리 이하에 있는 파일 이름이. sh로 끝나는 파일 중 수정시간이 1일 이 
전인 파일을 검색 (오늘이 7월 26일이면 25일 이전에 마지막으로 수정된 파일을 검색)

 

3)  grep 명령어 
• 형식 : # grep [옵션] [정규표현식] [검색 대상 파일/디렉터리]
• 주요 옵션
- [-n] : 행번호를 같이 출력
- [-v] : 해당 패턴이 들어가지 않은 행을 출력 
- [-i] : 대소문자 구분 안 함
- [-e] : 정규표현식 사용을 명시

 

• 정규표현식
- ^ : 해당 문자로 시작
ex) # grep ‘^ap’ test.txt → test.txt 파일 내에서 ap로 시작하는 행을 출력 
--- apple, api 등이 해당


- $ : 해당 문자로 끝
ex) # grep ‘le$’ test.txt →  test.txt 파일 내에서 le로 끝나는 행을 출력 
--- apple, badedale 등이 해당


- [] : 대괄호 안에 있는 문자 집합 중 하나와 일치
ex) # grep ‘^[A-Z]’ test.txt →  test.txt 파일 내에서 영어 대문자로 시작하는 행을 출력 
--- Apple, Banana, Car 등이 해당


-. : 하나의 문자를 의미
ex) # grep ‘A.. le$’ test.txt →  test.txt 파일 내에서 A 다음에 두 개의 문자가 나오고 le로 끝나는 문자열로 끝나는 행을 출력 
--- abc Apple, def Alele 등이 해당


- * : 선행하는 문자열이 0개 이상 일치
ex) # grep ‘A.. le.* end$’ test.txt →  test.txt 파일 내에서 A 다음에 두 개의 문자가 나오고 le로 끝나는 문자열 다음에 임의 
의 문자가 0개 이상 존재하고 하나의 공백 후에 end로 끝나는 행을 출력
--- Apple Apple end, Apaleace end 등이 해당

 

4)  history 명령어
• 콘솔에 입력하였던 명령어들의 히스토리를 출력
• [-c] : 기존 히스토리를 모두 삭제
ex) history 10 : 최근 10개의 히스토리를 출력

 

• 관련 명령
-!! : 바로 전에 사용한 명령을 다시 수행
-! [숫자] : 해당 history 번호로 명령을 다시 수행
-! [문자열] : 해당 문자열이 들어간 가장 최근 명령을 다시 수행
ex) #! find →  find 가 들어간 가장 최근 명령을 다시 수행 

 

5)  date 명령어
• 형식 : # date [옵션] [포맷]
• 주요 포맷
- +%Y : 년도를 출력 
- +%m : 월을 출력 
- +%d : 일을 출력 
- +%H : 시를 출력 
- +%M : 분을 출력
ex) echo `date +%Y% m% d% H% M` →   현재 날짜가 2023년 4월 20일 12시 06분이면 202304201206 출력

 

https://blog.naver.com/is_king

 

Shionista의 보안블로그 : 네이버 블로그

소스코드/웹 취약점 진단, 모의해킹

blog.naver.com

728x90