Shell script 에서 자주 쓰는 명령들

처음 시작은
#!/bin/sh

Perl 처음 시작은
#!/usr/bin/perl -w

argument는 $0 $1 $2 …
argument 처리는 아래 형식.

for ARGUMENT in “$@”; do
case $ARGUMENT in
–commit)
COMMIT=$2;
;;
–uploader)
UPLOADER=$2;
;;
–branch)
BRANCH=$2;
;;
–patchset)
PATCHSET_ID=$2;
;;
–change-url)
CHANGE_URL=$2;
CHANGE_NO=`basename $CHANGE_URL`;
;;
esac
shift;
done

Perl에서 Argument 처리는
$ARGV[0], $ARGV[1], $ARGV[2]… $#ARGV 는 argument 개수
 

공백으로 나눠진 파라미터 프린트
gawk ‘{print $1}’

/로 나눠진 마지막 파라미터 프린트. cut 도 사용가능
gawk -F / ‘{print $NF}’

파일명 얻기는
basename 경로명

디렉토리명 얻기는
dirname 경로명

절대경로 얻을 때는
readlink -e 상대경로

특정 문자열 치환은
sed -e “s/문자열/문자열/g”

if는 이런 형식. 비교식은 http://www.gnu.org/s/bash/manual/bash.html#Bash-Conditional-Expressions 참고

if [ “$변수” = “” ]; then
  명령;

elif
  명령;
else
  명령;
fi

for each 는 이런 형식

for 변수 in $가져올변수
do
  echo “$변수”
done

case는 위의 argument 처리 참고.

명령의 결과 저장은 `명령`
변수의 값으로 치환한 문자열은 “$변수 포함 문자열”
그냥 그대로 문자열은 ‘문자열’

끝에만 자를 땐
tail -n 숫자

앞에만 자를 땐
head -n 숫자

문자열 있는 줄만 얻고 싶을 땐
grep “문자열”

정규식으로 찾은 문자열 포함된 줄만 얻고 싶을 땐
grep -P “^문자열[0-9a-zA-Z-_/]*$”

basic http 인증은 https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients 참고

html 얻어올 때는
curl “주소”

개발 환경 개선 Git + Gerrit + checkpatch + cleanpatch

원래 나한테 좀 맞지 않던 카메라 개발에서 벗어나서 요즘 좀 재밌는 걸 하고 있다.
개발 업무를 살짝 벗어나서 SCM 업무를 하고 있는데, 내가 옳다고 생각하는 방향으로 부서 전체를 바꾸고 있어서 좀 재미나다. 회사 전체를 바꿀 수 있으면 더 재미날 것 같지만, 그건 이후의 일이고..

아무튼 요약하면 구글에서 NexusS 개발을 하면서 썼던 git + gerrit 시스템을 적용하고, 여기에 코딩룰 자동 오류 보고 + 코딩 룰 자동 오류 수정 + 수정본 자동 업로드를 구축 중이다. 여러 가지 것들을 조합해서 만들어 내는 개발환경 개선 작업은 신난다.

1. 기존의 불편한 Centeralized VCS 툴을 벗어나 DVCS를 사용해 여러 브랜치의 Integration 작업의 어려움을 줄이고, 같은 패치를 여러 곳에 적용하기 쉽게 만들고,
2. 코드 리뷰 시스템을 통해 좋은 코드를 함께 말할 수 있는 장을 만들고, 코드 개선을 양지로 끌어내고, 코딩 룰에 대해 생각하게 하고, 코드의 구조에 대해 생각하게 하고, 후배 개발자에게 선배 개발자의 지식을 전달할 수 있는 체계를 만들고,
3. 코딩 룰의 자동 체크를 통해 리뷰어의 노력을 덜 들이게 하고, 개발자의 모든 코드의 코딩룰을 검사하도록 하고, 수정하도록 요구하며,
4. 구조 개선 같은 복잡한 것까지는 아니더라도 체크한 패치가 오류가 있으면 간단한 코딩 룰 등은 자동으로 수정해서 바로 업로드 하여 개발자들의 코딩 룰 등 간단한 수정에 드는 노력을 줄인다.

여기에 기존 시스템(빌드, 배포 등)과의 호환성 유지를 위한 작업까지.. 아직은 사내 모든 부서가 내가 구축하는 것을 따르고 있지는 않기 때문에..

개발 생산성 향상이라는게 말만큼 거창한게 아니다. 개선에 개선을 거듭해 쓸데없는 일을 줄이고 줄여, 더이상 뺄 게 없는 프로세스를 만들어 내는 거다.

위에 것이 어떻게 가능하냐. git + gerrit + jenkins + Linux kernel의 checkpatch.pl, Linux kernel의 cleanpatch + Linux shell의 여러 utility + 손수 제작 스크립트(bash, perl 등)를 조합하면 된다.

딴데도 이렇게 하고 있는 곳이 있을까? 내맘대로 세계 최초라 주장하련다. ㅋㅋㅋㅋ

bash 에서 파일명 및 경로 분리

간단히 말하면 dirname <인자> 하면 마지막 / 뒷부분을 날린 결과가 나오고,
basename <인자> 하면 / 뒷부분이 나온다.

http://stackoverflow.com/questions/284662/how-do-you-normalize-a-file-path-in-bash
 
 

이것만은 잊지 않으려 한다 – 노무현 대통령 탄핵 소추안 발의 찬성자

모든 투표는 아래 명단을 참고하여 하도록 한다.

< 대통령(노무현)탄핵소추안 >


발의의원 명단
 
 유용태 홍사덕
 
찬성의원 명단
 
 강성구 강신성일 강운태 강인섭 강재섭 강창성 고진부
 고흥길 구종태 권기술 권철현 김경재 김경천 김광원
 김기배 김기춘 김덕룡 김동욱 김락기 김만제 김무성
 김문수 김방림 김병호 김상현 김성순 김성조 김영선 
 김영환 김옥두 김용갑 김용균 김용학 김용환 김원길
 김정부 김정숙 김종하 김진재 김찬우 김충조 김태식
 김학송 김홍일 김황식 김효석 맹형규 목요상 박근혜
 박금자 박병윤 박상천 박상희 박세환 박시균 박원홍
 박종근 박종우 박종희 박진 박헌기 박혁규 박희태
 배기운 서병수 서정화 손희정 송광호 송병대 송훈석
 신영국 신영균 신현태 심규철 심재철 안경률 안동선
 안상현 안택수 양승부 양정규 엄호성 오경훈 원유철
 유재규 유한열 유흥수 윤두환 윤여준 윤영탁 윤철상
 윤한도 이강두 이경재 이규택 이근진 이만섭 이방호
 이병석 이상득 이상배 이성헌 이승철 이연숙 이용삼
 이원창 이윤성 이윤수 이인기 이재오 이재창 이정일
 이주영 이한구 이해구 이해봉 이협 이훈평 이희규
 임인배 임태희 장광근 장성원 장재식 장태완 전갑길
 전용원 전용학 정균환 정문화 정의화 정창화 정철기
 정형근 조순형 조웅규 조재환 조정무 조한천 주진우
 최명헌 최병국 최병렬 최선영 최연희 최영희 최재승
 한충수 한화갑 함석재 함승희 허태열 현경대 홍문종
 홍준표 황우여 황창주

국회 의안정보 시스템 : http://likms.assembly.go.kr/bill/jsp/BillDetail.jsp?bill_id=027886