Bash 문서 원본 보기
←
Bash
둘러보기로 가기
검색하러 가기
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
이 문서는 편집하거나 다른 명령을 할 수 없도록 보호되어 있습니다.
문서의 원본을 보거나 복사할 수 있습니다.
Linux에서 많이 사용하는 Shell Script인 bash(Bourne Again Shell)를 정리 한다. == 사용자 가이드 == === Bash 실행 순서 === *첫 로그인 시 /etc/profile ~/.bash_profile, ~/.bash_login, ~/.profile *Shell 실행시 마다 ~/.bashrc *.bashrc 샘플 alias showinfo='~/bin/showinfo.bash' alias dir='/bin/ls -alF' alias dird='/bin/ls -alF | grep /' === Bash 인수 === *$# : 인수의 갯수 :*$1, $2, $3, ... :*shift for thing in "$@"; do echo $thing done *bash -c 실행할_문자열 *~ 2> /dev/null : 표준 에러를 표시하지 않음 *~ 1>&2 /dev/null : 표준 출력과 표준 에러를 표시하지 않음 *${변수=값} : 변수에 값 지정 *${HADOOP_HOME:-${HADOOP_PREFIX}} : ${HADOOP_HOME}에 값이 없을 경우 ${HADOOP_PREFIX} 값을 사용 === 표준 입출력 === 표준 입력 (/dev/stdin) *< *<<+<br/>Here document.<br/>+ 표준 출력 (/dev/stdout) *> *1> *> /dev/null 2>&1 표준 오류 (/dev/stderr) *2> /dev/null *2> /dev/null 1>&2 === 변수 편집 === Replace ${변수명/aaa/bbb} : 첫 aaa를 bbb로 변경 ${변수명//aaa/bbb} : 모든 aaa를 bbb로 변경 참고 문헌 *[https://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/string-manipulation.html https://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/string-manipulation.html] === Prompt === <pre>PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] '</pre> === 기타 정리 === #!/bin/bash STR_DATE=`date +%Y%m%d_%H%M%S` ${STR_DATE} funcShowinfo() { ~/bin/showinfo_$1.bash echo '.' } funcShowinfo "test" *연월일 표시 #--- CentOS에서 date +%Y%m%d_%H%M%S *kill `ps -C ~ -o pid=` *Script Arguments : $1 test ~ = ~ [ ~ = ~ ] echo $? if [[$# < 5| $# < 5]]; then if [ "$1" = "centos" ]; then echo 'rarara' fi if ~; then ~ elif ~ ; then ~ else ~ fi while ~ do ~ done until ~ do ~ done case string in "~") ~ ;; esac for hostname in "controller001" "controller002" "controller003"; do echo ${hostname} done for ~ in [list] do ~ done for ~ do ~ done select ~ in [~] do ~ done<font face="sans-serif, Arial, Verdana, Trebuchet MS"><span style="white-space: normal;"> </span></font> == Bash Script 가이드 == === Bash Script 시작 표시 === <pre>#!/usr/bin/env bash</pre> === Bash Script 실행 === *chmod Bash_file<br/>Bash_file *source Bash_file : 스크립트에서 환경 설정한 것이 유지 된다. *. Bash_file : source Bash_file과 동일 === Bash Script Arguments === {| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" |- | width="33%" align="center" valign="middle" style="background-color:#eee;" | Item | width="70%" align="center" valign="middle" style="background-color:#eee;" | Description |- | align="center" valign="middle" | $# | align="left" valign="middle" | Argument의 개수 |- | align="center" valign="middle" | $1, $2, $3, ... | align="left" valign="middle" | Argument |- | align="center" valign="middle" | shift | align="left" valign="middle" | $1을 삭제하고 번호를 하나씩 줄인다. |} === 종료 코드 === <pre>exit 종료_코드</pre> *0 : 정상 종료 *1 ~ 255 : 비정상 종료 *$? : 직전에 실행된 명령의 종료 코드 == 유용한 Tip == === allowDBConnection === #!/bin/bash ### ================================================================================================ ### 프로그램 명 : allowDBConnection, Version 1.0 ### 프로그램 설명 : 특정 host에서 Database로의 접속을 허용 합니다. ### 작성자 : 김계현 (pnuskgh@gmail.com, 010-5034-3931) ### 작성일 : 2002.09.27 ~ 2002.09.27 ### ----[History 관리]------------------------------------------------------------------------------ ### 수정자 : ### 수정일 : ### 수정 내용 : ### ================================================================================================ ###--- Command Line에서 입력된 인수를 검사한다. if [[$# = 4| $# = 4 ]]; then HOST=$1 DATABASE=$2 USER=$3 PASSWORD=$4 elif [[$# = 5| $# = 5 ]]; then HOST=$1 DATABASE=$2 USER=$3 PASSWORD=$4 else /bin/echo "Using : allowDBConnection HOST DATABASE USER PASSWORD [ROOTPASSWORD]" /bin/echo " HOST : 접속하려는 client의 host" /bin/echo " DATABASE : 접속을 허용하려는 Database" /bin/echo " USER : Database 사용자" /bin/echo " PASSWORD : Database 사용자의 암호" /bin/echo " ROOTPASSWORD : Database의 root 사용자의 암호" /bin/echo " " exit fi ###--- 특정 host에서 Database로의 접속을 허용 합니다. if [[$# = 4| $# = 4 ]]; then /usr/bin/mysql -uroot -p <<+ connect mysql; insert into db values ('${HOST}', '${DATABASE}', '${USER}', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y'); commit; flush privileges; grant all privileges on ${DATABASE}.* to ${USER}@${HOST} identified by '${PASSWORD}'; exit + else /usr/bin/mysql --user=root --password=${ROOTPASSWORD} mysql <<+ insert into db values ('${HOST}', '${DATABASE}', '${USER}', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y'); commit; flush privileges; grant all privileges on ${DATABASE}.* to ${USER}@${HOST} identified by '${PASSWORD}'; exit + fi === backupInstance === #!/bin/bash ### ================================================================================================ ### 프로그램 명 : backupInstance, Version 1.0 ### 프로그램 설명 : Sugar Instance와 Database를 백업 합니다. ### 작성자 : 김계현 (pnuskgh@gmail.com, 010-5034-3931) ### 작성일 : 2002.07.15 ~ 2002.09.27 ### ----[History 관리]------------------------------------------------------------------------------ ### 수정자 : ### 수정일 : ### 수정 내용 : ### ================================================================================================ ###--- Default 환경변수를 설정한다. WEB_ROOT=/var/www/html BACKUP_DIR=/data/backup ###--- Command Line에서 입력된 인수를 검사한다. if [[$# = 4| $# = 4 ]]; then INSTANCE=$1 DATABASE=$2 USER=$3 PASSWORD=$4 else /bin/echo "Using : backupInstance INSTANCE DATABASE USER PASSWORD" /bin/echo " INSTANCE : Sugar Instance" /bin/echo " DATABASE : Database" /bin/echo " USER : Database 사용자" /bin/echo " PASSWORD : Database 사용자의 암호" /bin/echo " " exit fi ###--- Sugar Instance를 백업 합니다. cd ${WEB_ROOT} /bin/tar cvf ${BACKUP_DIR}/${INSTANCE}_`date +%Y%m%d_%H%M%S`.tar ${INSTANCE} /usr/bin/mysqldump --user=${USER} --password=${PASSWORD} ${DATABASE} > ${BACKUP_DIR}/${DATABASE}_DB_`date +%Y%m%d_%H%M%S`.sql /bin/tar cvf ${BACKUP_DIR}/${DATABASE}_DB_`date +%Y%m%d_%H%M%S`.tar /var/lib/mysql/${DATABASE} clear /bin/echo "--------------------------------------------------" /bin/echo "Backup folder : " ${BACKUP_DIR} /bin/echo "Backup datetime : " `date +%Y%m%d_%H%M%S` /bin/echo " " /bin/ls -alF ${BACKUP_DIR} === Watchdog Tomcat === *Apache Tomcat을 모니터링하고 있다가 죽었을 경우 살려주는 Script :*watchdogTomcat.csh #!/bin/csh ###--- Default 환경변수를 설정한다. goto theSet theSetEnd: ###--- 인수의 초기값을 설정한다. set timeSecond="60" ### Process를 검사할 간격 set flagCheck="false" ### true일 경우 한번만 검사를 한다. ###--- Command Line에서 입력된 인수를 검사한다. goto theArg theArgEnd: ###--- Process를 검사한다. theStart: ###--- Process를 확인한다. set procPID=`/bin/ps -ef | /bin/grep -v /bin/grep | /bin/grep "${PROC_STR}" | /bin/awk '{print $2}'` ###--- Process가 죽었을 경우 다시 살린다. if ("${procPID}" == "") then ${PROC_STOP} >& /dev/null ${PROC_START} >& /dev/null \/bin/echo "----------------------------------------" >> ${JOB_LOG} \/bin/echo "--- ${PROC_NAME} 재기동" >> ${JOB_LOG} \/bin/date >> ${JOB_LOG} \/bin/echo " " >> ${JOB_LOG} endif ###--- "-check" 인수가 있을 경우 처리를 종료하고, 없을 경우 timeSecond만큼 sleep한후 다시 검사한다. if ("${flagCheck}" == "true") exit /bin/sleep ${timeSecond} goto theStart theSet: ###--- 환경변수를 설정한다. set PROC_NAME="Apache Tomcat 서버" ### Process 명 ### Process를 확인할 수 있는 문자열 set PROC_STR="Dcatalina.home=/usr/local/tomcat6" ### Process Stop 명령어 set PROC_STOP="service tomcat6 stop" ### Process Start 명령어 set PROC_START="service tomcat6 start" set JOB_LOG="/root/logs/watchdog.log" ### 현재 프로그램이 처리한 Log 파일 goto theSetEnd theArg: if ($#argv < 1) goto theArgEnd switch ("$argv[1]") case "-check": set flagCheck="true" shift breaksw case "-help": goto theUsing case "-time": shift if ($#argv < 1) goto theUsing set timeSecond="$argv[1]" shift breaksw default: goto theUsing breaksw endsw goto theArg theUsing: \/bin/echo "Using : watchdogTomcat.csh [-help] [-time sec] [-check]" \/bin/echo " -help : 프로그램에 대한 사용법을 보여준다." \/bin/echo " -time sec : 초 단위로 Process를 검사할 간격을 설정한다. (default. 60)" \/bin/echo " -check : 한번만 검사를 한다. (crontab에서 사용할 경우를 위해)" \/bin/echo " " exit === 파일 목록 추가 === CLASSPATHA=/nas/appl/flume/lib for file in /nas/appl/flume/lib/*.jar do CLASSPATHA=${CLASSPATHA}:${file} done === Disk 용량 확인 === *폴더별 사용 용량 확인 du -s -m * == awk == *명령행 awk 'pattern {action}' file awk -f awkfile file *Pattern BEGIN //--- 시작전 실행 END //--- 종료후 실행 /정규식/ //--- 정규식을 만족하면 실행 expression //--- 참일 경우 실행 (not zero, not null), &&(and), ||(or) !(not) pattern1, pattern2 //--- pattern1과 pattern2 사이의 라인에서 실행 *Action print $1, $2 printf(format, ...) if (~) ~ else ~ var ~pattern : var 변수가 pattern에 일치하면 참 var !~pattern : var 변수가 pattern에 일치하지 않으면 참 while (~) ~ for (~;~;~) ~ for (~ in ~) ~ do ~ while (~) break, continue next exit exit expression *Variables FILENAME //--- 파일 이름 FS //--- 입력 필드 분리자 NR //--- 현재 행번호 NF //--- 현재 행의 필드 갯수 OFS //--- 출력되는 필드의 분리자 *내장 함수 length(x) //--- 문자의 길이 int(x) //--- x의 정수값 substr(str, start, len) //--- str 문자열에서 start부터 len개의 문자 반환 sub(from, to, str) //--- str 문자열에서 첫번째 from을 to로 치환 gsub(from, to, str) //--- str 문자열에서 모든 from을 to로 치환 split(str, array, sep) //--- str 문자열을 sep 문자열로 구분하여 쪼개어 array에 저장 (array[1]) toupper(str) tolower(str) system(command) //--- 명령을 실행하고 exit 상태를 반환 *참고 문헌 :*[http://www.dreamy.pe.kr/zbxe/CodeClip/6332 http://www.dreamy.pe.kr/zbxe/CodeClip/6332] == 파일 편집 == sed <pre>echo "NOZEROCONF=yes" >> /etc/sysconfig/network #--- 마지막에 문자열 추가 sed -i '/source/i\ new prev content' fileName #--- source 이전줄에 추가 sed -i '/source/c\ new prev content' fileName #--- source 줄을 교체 sed -i '/source/a\ new next content' fileName #--- source 다음줄에 추가 sed -i '/source/r textfile' fileName #--- source 다음줄에 textfile을 읽어서 추가 sed -i 's/source/target/g' fileName #--- 문자열 치환 (Substitute) sed -i 's/hello/& world/g' fileName #--- &는 패턴 매칭된 부분임 sed -i '/source/d' fileName #--- 삭제 (Delete) sed '/source/p' fileName #--- 문자열 출력 (Print) sed -e script sed -f script_file sed -r 정규표현식 find . -type f -print0 | xargs -0 's/source/target/g' </pre> <br/>yum -y install crudini <pre>crudini --set [OPTION]... config_file section [param] [value] crudini --get [OPTION]... config_file [section] [param] crudini --del [OPTION]... config_file section [param] [list value] crudini --merge [OPTION]... config_file [section]</pre> <br/>xargs : 앞 명령어의 출력을 뒷 명령어의 인자로 전달 <pre>ls -alF | xargs echo ls | xargs -i cp {} ./backup_files ls | xargs -l{} cp {} ./backup_files</pre> <br/>참고 문헌 *[http://so-blog.net/2016/04/22/sed/ http://so-blog.net/2016/04/22/sed/] == 참고 문헌 == *[[Csh|C Shell]] *[http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/ 고급 Bash 스크립팅 가이드] *[https://github.com/denysdovhan/bash-handbook/blob/master/translations/ko-KR/README.md Bash Handbook] *[http://wiki.kldp.org/Translations//html/Shell_Programming-KLDP/index.html Shell 프로그래밍의 기본] *[http://unix.co.kr/bbs/board.php?bo_table=02_11&wr_id=24 BASH 쉘 스크립팅 입문: 버전 1.2] *[https://mug896.gitbooks.io/shell-script/content/exp_and_sub/parameter_expansion.html Bash Parameter expension] *모니터링 :*[http://bash.cyberciti.biz/shell/monitoring/ http://bash.cyberciti.biz/shell/monitoring/] ::*[http://bash.cyberciti.biz/monitoring/monitor-mysql-server-shell-script/ http://bash.cyberciti.biz/monitoring/monitor-mysql-server-shell-script/] [[Category:Linux|Category:Linux]]<br/>[[Category:프로그램 언어|Category:프로그램 언어]]
Bash
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
더 보기
검색
주요 메뉴
오픈소스 컨설팅
오픈소스
오픈소스 라이선스
오픈소스 커뮤니티
오픈소스 종류
오픈소스 현황
오픈소스 한글화
문자셋과 인코딩
Storage
Network
보안
고가용성
모니터링
오픈 API
오픈 서비스
Cloud
BigData
Android
산사랑 노트
둘러보기
인기 문서
최근 수정 문서
모든 문서
모든 분류
임의 문서
위키 사용법
자매 사이트
CMS
오비컨 홈페이지
오비컨 CMS
블로그
데모 - SuiteCRM
산사랑의 Twitter
산사랑의 Facebook
친구 사이트
공개SW 포털
OLIS
한국공개소프트웨어협회
AppCenter 지원본부
OLC
PSEG
개발자 블로그
블로터
개인 메뉴
메뉴 수정
양식함
도구
여기를 가리키는 문서
가리키는 글의 최근 바뀜
특수 문서 목록
문서 정보