IT 이야기/Linux 셸 스크립트137 [Linux 셸 스크립트] 제어 구문 - 103 웹 서버에서 파일을 내려받아서 MD5 해시값 계산하기 1. 사용 명령어 (1) curl (2) md5sum 2. 키워드 & 사용처 (1) 키워드 내려받기, 종료 스테이터스 (2) 사용처 네트워크 경유로 파일을 취득할 때 복사에 성공했는지 확인해서 다음 명령어를 실행하고 싶을 때 사용합니다. 3. 실행 예제 $ ./andlist.sh 83036ec1109bf9770fc2d8673b545d35 sample.dat 4. 스크립트 #!/bin/sh # 내려받을 파일 URL 경로, 파일명 지정 url_path="http://www.example.org/" ① filename="sample.dat" ① # 파일 내려받기, 내려받기에 성공하면 md5 해시값 표시 # Mac/FreeBSD라면 md5sum 명령어가 아니라 md5 명령어 사용 curl -sO "${url_p.. 2021. 4. 21. [Linux 셸 스크립트] 제어 구문 - 102 스크립트를 수정해서 if문 안이 비더라도 에러가 발생하지 않게 하기 1. 사용 명령어 (1) :(널 명령어) 2. 키워드 & 사용처 (1) 키워드 if문, 널 명령어, 빈 줄 (2) 사용처 사양 변경 등으로 필요 없어진 처리를 주석 처리해서 if문 내용이 비었더라도 에러가 발생하지 않게 하고 싶을 때 사용합니다. 3. 실행 예제 $ ./if-null.sh $ &2 exit 1 fi 5. 해설 이 스크립트는 셸 변수 datafile로 지정한 데이터 파일 존재를 확인해서 파일이 있으면 현재 디렉터리에서 myapp라는 프로그램을 실행합니다. 그런데 사양이 변경되어 myapp을 실행하지 않아도 되어서 주석 처리한 결과, if문 안이 비어 에러가 발생할 때 이를 해결한다고 가정합니다. 셸 스크립트는 if문 내용이 없으면 에러가 발생합니다. 예를 들어 다음 소스는 lock.tmp라.. 2021. 4. 21. [Linux 셸 스크립트] 제어 구문 - 101 ID 컬럼을 "00001" 처럼 0으로 채운 CSV 파일에서 번호를 지정해서 값을 추출하기 1. 사용 명령어 (1) read (2) cut (3) test 2. 키워드 & 사용처 (1) 키워드 숫자값, 문자열, 0 채우기 (2) 사용처 "00001" 처럼 0으로 채운 문자열을 그대로 숫자로 다루고 싶을 때 사용합니다. 3. 실행 예제 $ cat data.csv 00001,Busan 2,Kim 3,Park 00004,Seo $ ./zero-string.sh Busan &2 ② exit 1 ② fi # CSV 파일 읽기 while read line ③ do # 각 컬럼을 cut으로 추출 id=$(echo $line | cut -f 1 -d ',') ④ name=$(echo $line | cut -f 2 -d ',') ④ # ID 컬럼이 셸 변수 match_id로 지정한 ID와 일치하면 이름 표시 .. 2021. 4. 21. [Linux 셸 스크립트] 제어 구문 - 100 강제 종료될 때까지 파일 내려받기를 반복해 통신 확인하기 1. 사용 명령어 (1) true (2) curl (3) sleep 2. 키워드 & 사용처 (1) 키워드 무한 반복, 접속 확인, 내려받기 (2) 사용처 웹 서버 확인을 계속 반복하고 싶을 때 사용합니다. 3. 실행 예제 $ ./download-loop.sh [check OK] [check OK] [check OK] [check OK] [check OK] ^C 2021. 4. 20. [Linux 셸 스크립트] 제어 구문 - 099 연속된 파일명을 가진 URL을 자동 생성해서 순서대로 내려받기 1. 사용 명령어 (1) seq (2) printf (3) curl 2. 키워드 & 사용처 (1) 키워드 연속번호, URL, 내려받기 (2) 사용처 파일명에 연속한 번호가 있는 그림 파일을 웹 서버에서 자동으로 내려받고 싶을 때 사용합니다. 3. 실행 예제 $ ./number-file.sh ${i}.txt done 파일 내려받기 확인 등의 목적으로 이런 파일을 작성하는 스크립트가 자주 사용됩니다. 이 스크립트는 필자 환경에서는 0.1초도 걸리지 않습니다. while문으로 작성해서 expr 명령어로 카운터를 늘려가면 1.2초 정도 걸립니다. 이처럼 seq 명령어로 반복을 만들면 10배 이상 빨라지게 됩니다. ①에서 내려받을 파일 URL을 지정합니다. 이때 연속 번호 부분은 %03d라는 printf 명령어로.. 2021. 4. 20. [Linux 셸 스크립트] 제어 구문 - 098 변수가 포함된 IP 주소 목록 파일을 읽어서 ping 명령어로 확인하기 1. 사용 명령어 (1) sed (2) ping 2. 키워드 & 사용처 (1) 키워드 for문, 템플릿 파일, 치환, 변수 (2) 사용처 템플릿 파일을 사용해서 네트워크 개통을 확인하고 싶을 때 사용합니다. 3. 실행 예제 $ cat ping_target.lst %ADDR_HEAD%.1 %ADDR_HEAD%.2 %ADDR_HEAD%.3 %ADDR_HEAD%.4 $ ./for_command.sh 192.168.2 [Success] ping -> 192.168.2.1 [Success] ping -> 192.168.2.2 [Failed] ping -> 192.168.2.3 [Success] ping -> 192.168.2.4 4. 스크립트 #!/bin/sh # 명령행 인수 확인 if [ -z "$1" ]; t.. 2021. 4. 19. [Linux 셸 스크립트] 셸 기능 다루기 - 097 셸 스크립트 일부에 Perl이나 Ruby 사용하기 1. 사용 명령어 (1) perl (2) nc (3) sleep 2. 키워드 & 사용처 (1) 키워드 한 줄 명령어, 펄, 루비, 난수 (2) 사용처 난수 생성 등 셸 스크립트 기능 일부로 펄이나 루비 코드를 사용하고 싶을 때 사용합니다. 3. 실행 예제 $ ./perl-oneline.sh Connection to 192.168.2.1 80 port [tcp/http] succeeded! Wait: 4 sec Connection to 192.168.2.1 80 port [tcp/http] succeeded! 4. 스크립트 #!/bin/sh # 테스트 통신할 서버 정의 ipaddr="192.168.2.1" ① port=80 ① # 1에서 10까지 정수값 난수를 펄 한 줄 명령어로 생성 waittime=$(.. 2021. 4. 19. [Linux 셸 스크립트] 셸 기능 다루기 - 096 여러 호스트에 병렬로 ping을 날려서 대기 시간 줄이기 1. 사용 명령어 (1) ping (2) wait (3) cat 2. 키워드 & 사용처 (1) 키워드 병렬 처리, 동기, 종료 (2) 사용처 여러 호스트에 ping 명령어를 실행하는 대기 시간을 줄이고자 병렬로 백그라운드 실행시키고 명령어 종료를 동기화해서 결과를 순서대로 출력하고 싶을 때 사용합니다. 3. 실행 예제 $ ./background-wait.sh PING 192.168.2.1 (192.168.2.1): 56 data bytes 64 bytes from 192.168.2.1: icmp_seq=0 ttl=255 time=3.554 ms 64 bytes from 192.168.2.1: icmp_seq=0 ttl=255 time=3.435 ms 64 bytes from 192.168.2.1: icm.. 2021. 4. 19. [Linux 셸 스크립트] 셸 기능 다루기 - 095 여러 URL 파일을 동시에 병렬로 내려받기 1. 사용 명령어 (1) curl 2. 키워드 & 사용처 (1) 키워드 백그라운드, 병렬 처리, 내려받기 (2) 사용처 대기 시간이 있는 명령어가 많아서 병렬로 실행해 전체 실행 시간을 줄이고 싶을 때 사용합니다. 3. 실행 예제 $ ./background-download.sh $ &1을 같이 사용할 때는 &를 어디에 위치시켜야 할까요? 다음처럼 백그라운드 실행을 위한 &를 제일 끝에 붙이는 것이 정답입니다. #!/bin/sh # 시간이 걸리는 명령어 long_time_program 표시 결과를 # result.log에 리다이렉트하고 백그라운드로 실행 long_time_program > result.log 2>&1 & 하지만 병렬로 프로세스를 실행하면 서버에 부담이 됩니다. 따라서 많은 처리를 백그라운드.. 2021. 4. 19. [Linux 셸 스크립트] 셸 기능 다루기 - 094 명령어가 실패한 시점에 종료해 스크립트 오작동 방지하기 1. 사용 명령어 (1) set (2) cd (3) rm 2. 키워드 & 사용처 (1) 키워드 종료 스테이터스, 명령어, 실패, 정지 (2) 사용처 어떤 중요한 처리를 하는 스크립트에서 도중에 명령어가 하나라도 실패하면 거기서 정지하고 싶을 때 사용합니다. 3. 실행 예제 $ ./set-e.sh ./set-e.sh: line 12: cd: /var/log/myapp-: No Such file or directory $ ls set-e.sh test.log diff.txt 이렇듯 '예상한 실행 결과지만 종료 스테이터스가 0이 아님' 같은 명령을 포함하는 스크립트에서 set -e를 쓰고 싶을 때는 몇 가지 방법이 있습니다. 1. 일시적으로 set +e해서 set -e를 무효화하기 set 명령어에 +e 옵션을.. 2021. 4. 15. 이전 1 2 3 4 5 6 7 ··· 14 다음