'2020/11/03'에 해당되는 글 2건

  1. 2020.11.03 [bash: -x] 스크립트 디버깅
  2. 2020.11.03 [bash: awk] 단어 위치 바꾸기
bash script (backup)2020. 11. 3. 16:53

 

반달가면 이글루에서 백업 - bahndal.egloos.com/440518

 

작성한 셸 스크립트의 동작이 뭔가 이상할 때, 어느 부분에 문제가 있는지 찾기 위해 -x 옵션을 활용할 수 있다.

 

작성한 스크립트가 my_script.sh라고 하면, 아래와 같이 실행해 보자.

 

bash -x my_script.sh

 

스크립트가 실행되면서 명령어와 각 변수에 할당된 값들이 화면에 출력된다. 스크립트 실행 중간에 오류가 나서 종료되는 상황이라면 오류가 발생하기 직전까지의 실행 결과를 볼 수 있다.

 

개인적으로는 이 출력 내용을 다른 파일로 저장한 후 차근차근 살펴보는 식으로 사용하는데, 좀 길고 복잡한 스크립트를 만들어야 할 경우에 꽤 도움이 된다. 출력 결과를 my_script.log 파일에 저장하려면 아래의 예를 참고하자.

 

bash -x my_script.sh > my_script.log

 

 

Posted by 반달가면

댓글을 달아 주세요

bash script (backup)2020. 11. 3. 16:49

 

반달가면 이글루에서 백업 - bahndal.egloos.com/439244

 

그냥 예제를 하나 적어두는 것이 가장 나을 것 같다.

 

예를 들어 people.txt 파일의 내용이 아래와 같이 이름::이메일::나이 형태라고 해 보자.

 

john::john@mail.com::24

mary::mary@mail.com::22

 

이것을 이메일[탭]이름[탭]나이 형태로 바꿔서 result.txt 파일에 저장하려고 한다. 아래와 같이 하면 되겠다.

 

cat people.txt | awk -v FS="::" -v OFS="\t" '{ print $2,$1,$3 }' > result.txt

 

-v 옵션으로 awk의 내부 변수를 설정해 주는데, FS는 입력에 적용하는 항목 구분자(field separator)이고 OFS는 출력에 적용하는 항목 구분자이다.

 

FS에 지정된 구분자를 기준으로 첫번째 항목은 $1에, 두번째 항목은 $2에 대응된다. 위의 예시를 기준으로 보면 $1은 이름, $2는 이메일에 대응될 것이다.

 

이름과 이메일의 순서를 바꿔야 하므로 print 명령에서 순서를 $2,$1,$3 이렇게 했다. 그리고 이 결과를 result.txt로 저장.

 

result.txt의 내용은 아래와 같이 될 것이다.

 

john@mail.com john 24 mary@mail.com mary 22

 

 

Posted by 반달가면

댓글을 달아 주세요