1장 명령줄 생산성 향상

2023. 6. 28. 19:46RedHat

728x90
반응형

간단한 Bash 스크립트 작성

복잡한 작업의 경우 여러 명령 을 연결하고 명령 간에 결과를 전달해야 하는 경우가 많다.
이러한 상황에서 Bash 쉘 환경과 스크립팅 기능을 사용하면 리눅스 명령을 쉡 스크립트에 결합하여 실제 문제를 해결할 수 있다.

스크립트 첫 번째 행은 '#!' 표기법으로 시작한다. '#!'은 파일의 나머지 줄을 처리하기 위한 명령 인터프리터 및 명령 옵션을 나타내는 인터프리터 지시문

# Bash 구문 스크립트 경우
#!/usr/bin/bash

쉘 스크립트 파일을 일반 명령으로 실행하려면 실행 권한이 필요!

"chmo" 명령을 사용하여 파일 권한을 수정, 필요한 경우 chown 명령을 사용하여 특정 사용자 또는 그룹에만 실행 권한을 부여 한다.

 

Bash 쉘 스크립트가 쉘의 PATH 환경 변수에 나열된 디렉터리에 저장된 경우 컴파일된 명령을 실행하는 것과 유사하게 파일 이름만 사용하여 쉡 스크립트를 실행할 수 있다.

※ 스크립트는 처음 일치하는 파일 이름을 실행하므로 기존 명령 이름을 사용하여 스크립트 파일의 이름을 절대 지정하지 마시오.

 

PATH 경로 보는법:

스크립트가 PATH 디렉토리에 없을 경우 which명령으로 파일을 쿼리하여 확인할 수 있다.

또는 ./scriptname처럼 디렉터리 접두사를 사용하여 현재 작업 디렉터리에서 스크립트를 실행 가능

#파일이름 scriptname

#!/usr/bin/bash

echo "Hello"

결과 : 

인용 특수 문자

백슬러시 (\), 작은따옴표(' '), 큰 따옴표(" ")

"" 큰따옴표 안에서는 변수는 작동

'' 작은따옴표 안에서는 변수 미작동

쉘 스크립트에서 출력 제공

"echo" 명령은 텍스트를 명령에 인수로 전달하여 임의 텍스트를 표시한다. STDOUT으로 전송

출력 리디렉션을 사용하여 텍스트를 다른 곳으로 보낼 수 있다. 

/bin 디렉터리가 사용자의 PATH 변수에 있고, scriptname 스크립트에 실행 파일이 있기 때문에 프롬프트에서 scriptname을 실행할 수 가 있는 것이다.
이전 PATH 디렉터리에서 scriptname라는 다른 실행 파일을 찾을 수 없는 경우 PATH 구문 분석기는 먼저 스크립트를 찾고, 홈 디렉터리의 bin 하위 디렉터리는 개인 스크립트를 저장하기 위한 공간이다.

echo는 오류 메시지를 표시하기 위해 널리 사용, 로그파일이나 표준 출력/오류로 보낸다.

https://knight76.tistory.com/3087

 

 

간단하게 1>, >2, >&2, 2>&1, exec를 살펴보기

쉘 스크립트에서 >와 /dev/null cp file-name > /dev/null >1은 커맨드의 표준 출력을 다음에 나오는 파일 디스크립터에 전달한다. $ ls b* >1 m.log$ cat m.log... >2는 쉘 스크립트의 표준 에러를 다음에 나오는 파

knight76.tistory.com

연습가이드
간단한 Bash 스크립트 작성

좀 더 편집하고 실행 파일로 변경해 보기

테스트 파일 모두 삭제하기


스크립트의 반복문 및 조건부 구문

Bash의 for 반복문 구문

for VARIABLE in LIST; do
COMMAND VARIABLE
done

LIST에 제공하는 문자열을 반복적으로 처리, VARIABLE이라는 변수에 임시로 값이 저장된다.

VARIABLE은 임시 이름이다. 원하는 이름을 적으면 된다.

Bash 스크립트 종료 코드

$? 변수에서 마지막으로 완료된 명령의 코드를 검색할 수 있다.

문자열 및 디렉터리에 대한 논리 테스트 및 값 비교

  • -gt
  • -ge
  • -lt
  • -le
  • -n
  • -z

조건부 구조

if <CONDITION>; then
	<STATEMENT>
    ....
    <STATEMENT
fi

## 조건이 많을 경우

if <CONDITION>; then
   <STATEMENT>
   ..
   <STATEMENT>
elif <CONDITION>; then
   <STATEMENT>
   ..
   <STATEMENT>
else
   <STATEMENT>
   ..
   <STATEMENT>
if

정규표현식 사용한 검색과 grep은 연습이 필요

 

 

 

 

반응형