유용하게 사용하는 쉘 스크립트에는 어떤 것이 있나요?
글쓴이: eunjea / 작성시간: 목, 2004/02/26 - 10:58오후
밑에 alias 얘기가 나왔으니...
여러분이 자주 쓰는 간단한 쉘 스크립트는 어떤것이 있는지요.
$ cat ~/bin/tarx
#!/bin/sh
if [ $# -eq 0 ]
then
echo ""
echo "Usage: `basename $0` filename" >&2
exit $NOARGS
fi
if [ -f $1 ] ; then
filename=$1
if [ ${filename##*.} != "bz2" ]
then
tar xvzf $filename
else
tar xvjf $filename
fi
else
echo "WTF!? ;-("
fi

댓글
phpBB의 주제 2개를 1개로 합치는 스크립트입니다. bbs.pytho
phpBB의 주제 2개를 1개로 합치는 스크립트입니다. bbs.python.or.kr 에서 주제를 합쳐야 할 일이 꽤 많아서.. :)
원래 파이썬 소스인데.. 쉘 스크립트인 척 해 봤습니다.. (..;)
#!/bin/sh python -c ' import MySQLdb from MySQLdb.cursors import DictCursor import sys phpbbprefix = "pybbs_" if len(sys.argv) < 4: print "Usage: %s <forumid> <origtopicid> <topicid_todelete>" % sys.argv[0] raise SystemExit else: forumid = int(sys.argv[1]) origtopicid = int(sys.argv[2]) deltopicid = int(sys.argv[3]) bdb = MySQLdb.connect(host="localhost", user="사용자", passwd="비밀번호", db="데이터베이스") b = bdb.cursor() b.execute("select topic_views, topic_replies, topic_first_post_id, topic_last_post_id from %stopics where topic_id = %d;" % (phpbbprefix, origtopicid)) odt = b.fetchall() if len(odt) != 1: print "Oops! orig not match" raise SystemExit b.execute("select topic_views, topic_replies, topic_first_post_id, topic_last_post_id from %stopics where topic_id = %d;" % (phpbbprefix, deltopicid)) ndt = b.fetchall() if len(ndt) != 1: print "Oops! orig not match" raise SystemExit topic_views, topic_replies, topic_first_post_id, topic_last_post_id = odt[0] topic_views += ndt[0][0] topic_replies += ndt[0][1] topic_first_post_id = min(topic_first_post_id, ndt[0][2]) topic_last_post_id = max(topic_last_post_id, ndt[0][3]) query = "update %stopics set topic_views=%d, topic_replies=%d, topic_first_post_id=%d, topic_last_post_id=%d where topic_id=%d;" % (phpbbprefix, topic_views, topic_replies, topic_first_post_id, topic_last_post_id, origtopicid) b.execute(query) print query query = "delete from %stopics where topic_id=%d;" % (phpbbprefix, deltopicid) b.execute(query) print query query = "delete from %stopics_watch where topic_id=%d;" % (phpbbprefix, deltopicid) b.execute(query) print query query = "update %sposts set topic_id=%d where topic_id=%d;" % (phpbbprefix, origtopicid, deltopicid) b.execute(query) print query query = "select forum_topics from %sforums where forum_id=%d;" % (phpbbprefix, forumid) b.execute(query) fdata = b.fetchall() if len(fdata) != 1: print "OOPS!" raise SystemExit query = "update %sforums set forum_topics=%d where forum_id=%d;" % (phpbbprefix, fdata[0][0]-1, forumid) b.execute(query) print query print "Merged!" # ex: ts=8 sts=4 sw=4 etYou need Python
mp3하나를 무한반복으로 틀어놓기 위한 방법으로 -_-;;[cod
mp3하나를 무한반복으로 틀어놓기 위한 방법으로 -_-;;
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
게으른 아파치 사용자는 발등이 불떨어지기 전까지 로그 분석도 안하고..
게으른 아파치 사용자는 발등이 불떨어지기 전까지 로그 분석도 안하고.. 초기화시켜버립니다. --;
cp -f /dev/null /usr/local/apache/log/access_log;cp -f /dev/null /usr/local/apache/log/error_log흠.. 이건.. :>
흠.. 이건..
가 조금 더 깔끔할 것 같군요 :-)
[quote="ironiris"]게으른 아파치 사용자는 발등이 불떨어지기
/usr/local/apache/log/access_log 와..
/usr/local/apache/log/error_log 를...
/dev/null 로 링크시켜놔버리세요 =3=33
아니면.. 로그화일을.. /dev/null 로 적어두면 =3=33
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
runsed, 환상입니다.Unix Power Tools에 나온 것
runsed, 환상입니다.
Unix Power Tools에 나온 것입니다.
#! /bin/sh # runsed - run a sed script on file(s), replace originals with edited versions # Script looks nicer with tabstops set at 4 (in vi, :se ts=4) myname="`basename $0`" script=sedscr stat=1 # Default exit status (reset to 0 before normal exit) temperr=/tmp/RUNSEDe$$ tempout=/tmp/RUNSEDo$$ trap 'rm -f $temperr $tempout; exit $stat' 0 trap 'echo "$myname: Interrupt! Cleaning up..." 1>&2' 1 2 15 if [ ! -r $script -o ! -f $script ] ; then echo "$myname quitting: $script isn't readable or isn't a file." 1>&2 exit fi case $# in 0) echo "Usage: $myname file-to-edit [files-to-edit]" 1>&2; exit ;; esac for x do echo "$myname: editing $x: " 1>&2 if [ "$x" = $script ] ; then echo "$myname: not editing $script!" 1>&2 elif [ ! -s "$x" -o ! -f "$x" ]; then echo "$myname: original $x is empty or not a file." 1>&2 elif [ ! -w "$x" ] ; then echo "$myname: can't write $x -- skipping..." 1>&2 else # If get here, run sed. To keep source file's permissions # and owner the same, don't overwrite it until the end -- # and use "cat > file" to write the file in place. sed -f $script "$x" >$tempout 2>$temperr if [ $? -ne 0 -o -s $temperr ] ; then cat $temperr 1>&2 echo "$myname quitting: 'sed -f $script $x' bombed!?!" 1>&2 exit elif [ -s $tempout ] ; then if cmp -s "$x" $tempout; then echo "$myname: $x file not changed." 1>&2 else if /bin/cat $tempout > $x then echo "$myname: done with $x" 1>&2 else echo "$myname quitting: problem replacing $x?" 1>&2 exit fi fi else echo "$myname quitting: sed produced an empty file - check your $script." 1>&2 echo "$myname: didn't change $x" 1>&2 exit fi fi done echo "$myname: all done" 1>&2 stat=0 exit태영님 글보구 문득 떠올라 한번 만들어 봤습니다.인수로 들어온 명령
태영님 글보구 문득 떠올라 한번 만들어 봤습니다.
인수로 들어온 명령을 계속 반복하는 겁니다.
#!/bin/bash
yes "$1" | sh
과자가 아닙니다.
cuckoo dozen, 즉.12마리의 뻐꾸기란 뜻입니다.
mp3를 ogg로 바꾸기...^^
#!/bin/bash export SOX_BIN=sox export MPG321_BIN=mpg321 export OGGENC_BIN=oggenc # 공백을 #X로 처리한 mp3 파일 목록을 얻는다. LIST=$(ls *.[mM][pP]3 | sed 's/\ /#X/g'); for i in $LIST; do fullname=$(echo "$i" | sed 's/#X/\ /g'); name=$(echo "$fullname" | sed 's/.[mM][pP]3//g'); echo $fullname; if [ ! -f "$fullname"]; then continue; fi # mpg321과 sox를 이용한 트릭으로 mp3파일을 wav파일로 변환한다. $MPG321_BIN -s "$fullname" | $SOX_BIN -t raw -r 44100 -s -w -c 2 - -t wav "$name.wav" # oggenc를 이용해 wav 파일을 ogg로 변환한다. $OGGENC_BIN "$name.wav" "$name.ogg"; done혼자 만들어서 사용했는데...
그다지 멋진 쉘 스트립트는 아니지만, 유용할 것 같아서 올려봅니다.[/code]
The difficulty in life is the choice.
mysql 접속을 위한 스크립트입니다.--tee 옵션을 줘서 쿼리 및
mysql 접속을 위한 스크립트입니다.
--tee 옵션을 줘서 쿼리 및 결과를 전부 저장하고,
3일 지난 것들은 지웁니다.
#!/bin/sh TIMESTAMP=`date +%s` SAVEDIR=~/.mysql case $1 in foodb) DB_HOST=211.xx.xx.xx DB_NAME=FOODB DB_USER=USER DB_OPT= ;; *) echo "접속할 데이터베이스는?" exit ;; esac TEEFILE=$SAVEDIR/$DB_NAME-$TIMESTAMP.tee find $SAVEDIR -mtime +3 -exec rm -f {} ';' /usr/bin/mysql \ --host=$DB_HOST --user=$DB_USER --password \ $DB_NAME --tee=$TEEFILE $DB_OPT----
http://nohmad.tumblr.com/
[quote="쿠크다스"]태영님 글보구 문득 떠올라 한번 만들어 봤습니
천재-_-;;;;;;;;
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
업그레이드 -_-;;[code:1]#!/bin/shye
업그레이드 -_-;;
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
나두....ㅎㅎ
아침마다 노래를 들려주는 기상음악 플레이어 입니다...
크론에 등록되어 있구요
#!/bin/sh mp3dir=/linD/music/mp3/fun #mp3dir=/root/music doneval=0 filecount=$(ls -l $mp3dir/* |wc -l) #echo file count "$filecount" retval=`echo "150/($filecount * 3)"|bc` #echo $retval while (expr $retval - $doneval) do for i in ${mp3dir}/* do /usr/local/bin/mplayer "$i" > /dev/null #echo playing "$i" sleep 1 done doneval=`expr $doneval + 1` done노래나올때 빨리 출근해야 하므로...모니터 켜지않고..바로 단축명령으로
킬하고 있습니다...kkmp는 다음곡, kmp는 완전 중지.
.bashrc 에 등록되어 있구요
function kmp { kill `ps -ef |grep 'mp3.sh'|grep -v grep|awk '{print $2}'` echo "kill process......." } function kkmp { ps -ef|grep '.mp3' |grep mplayer|grep -v grep | awk '{print $2}'|xargs kill $1 }근데...위의 정태영님의 쉘에....
yes "$@" | sh 이 부분의 |sh 을 정말 모르겠네요...무슨 뜻인가요?
저도 하나... :) Bash용 queue
bash에서 queue를 쓰고 싶어서 google에서 찾다가, 아래의 URL에서 코드를 보고
제 취향대로 수정해서 쓰고 있습니다. :)
http://www.tech-recipes.com/bourne_shell_scripting_tips911.html
#!/bin/sh # # queue.sh # bash용 queue 스크립트 create_queue() { local qName=$1 declare -a $qName } queue_insert_head() { local qName=$1 local element=$2 eval "${qName}=(\"$element\" \"\${${qName}[@]}\")" } queue_insert_tail() { local qName=$1 local element=$2 eval "${qName}=(\"\${${qName}[@]}\" \"$element\")" } queue_remove_head() { local qName=$1 eval "${qName}=(\${${qName}[@]:1:\${#${qName}[@]}})" } queue_remove_tail() { local qName=$1 eval "${qName}=(\${${qName}[@]:0:\$((\${#${qName}[@]}-1))})" } queue_clear() { local qName=$1 eval "unset ${qName}[@]" } queue_head() { local qName=$1 eval "echo \"\${${qName}[0]}\"" } queue_tail() { local qName=$1 eval "echo \"\${${qName}[\$((\${#${qName}[@]}-1))]}\"" } ## sample code create_queue myQueue myQueue=( 2 3 ) queue_insert_head myQueue 1 echo ${myQueue[@]} queue_head myQueue # echo head element of queue echo ${myQueue[0]} # get head element of queue queue_insert_tail myQueue "5 7" echo ${myQueue[@]} queue_tail myQueue # echo tail element of queue echo ${myQueue[$((${#myQueue[@]}-1))]} # get tail element of queue queue_insert_head myQueue 0 echo ${myQueue[@]} queue_remove_tail myQueue echo ${myQueue[@]} queue_remove_head myQueue echo ${myQueue[@]} queue_clear myQueue echo ${myQueue[@]}저는 굿모닝팝스 다시듣기 파일 다운받는 스크립~
http://linuxian.innori.com/47
rss.xml따운받아서 그날 mp3파일 뽑아내서 다운받는거~
아 그리고~ 네이버 영한 사전을 이용한 터미널에서 단어찾는 스크립도~사용중
무궁한 쉘~
저는 굿모닝팝스 다시듣기 파일 다운받는 스크립~
http://linuxian.innori.com/47
rss.xml파일 받아서 그날 mp3다운받는 쉘스크립
그리고~
네이버 영한 사전을 이용한 터미널에서 사전찾기~
스크립~^^
문피아에서 글 긁어오기
#!/bin/sh TARGET_URL="$1" BASE_URL=$(dirname $TARGET_URL) NEXT_URL="go first" until [ -z "$NEXT_URL" ] do w3m -I cp949 -O cp949 -cols 72 -dump $TARGET_URL | awk 'BEGIN {sw=""} /\[목록보기\]/ {sw=""} {if (sw) print} /댓글 부분으로/ {sw="ok"}' NEXT_URL=$(w3m -dump_source $TARGET_URL | grep -m 1 "윗글" | awk -F\' '{print $2}') TARGET_URL="$BASE_URL/$NEXT_URL" doneEUC-KR로 저장하고 문피아에서 시작할 글의 주소를 붙여주면 위로 위로 올라가면서 긁어줍니다.
매번 온라인으로 읽는 것보다는 저장해놓고 베가에서 망가미야라는 (원래는 만화 보는) 프로그램으로 읽는 게 편해서 만들어 봤습니다. 글 하나를 소스와 덤프로 두 번 접근하는 게 덜 효율적이긴 합니다만서도.
여기에 한 겹 더 입히면 연재되는 글을 꾸준히 추적하면서 받아오게 할 수도 있겠지만, 그러기엔 귀찮.. =3=3
zip 압축푸는 스크립트입니다
윈도우에서 zip을 가져다가 쓸일이 많은데 일일이 디렉토리 만들고 할려니 귀찮을때 좋습니다.
특정 디렉토리의 모든 zip 파일을 해제할때는 -a 옵션입니다.
filename : unzip.sh
#!/bin/bash if [ $# -eq 0 ]; then echo "Usage) $0 [-a|filename]" exit fi if [ $1 = "-a" ]; then for input in `ls *.zip`; do DNAME=`basename $input` DNAME=${DNAME%.zip} mkdir -p $DNAME &>/dev/null unzip -u -d $DNAME $input done else DNAME=`basename $1` DNAME=${DNAME%.zip} mkdir -p $DNAME &>/dev/null unzip -u -d $DNAME $1 fi__________________________________________________
Feisty로 전부 다 바꾸고 있습니다 ^^
__________________________________________________
모두 다 Hardy로 업그레이드 하고 있습니다.
.
.
코드에서 grep 하는 ..
find . -type f -name "*.[chSs]" -o -name "*.cpp" -o -name "*.hpp" | xargs grep "$1"
cron & EBS Easy English script~~
#!/bin/sh DURATION="1202s" DATE=`/bin/date '+%Y%m%d'` DIR=/home/revizes/ebs MPLAYER=/usr/bin/mplayer LAME=/usr/bin/lame FILE_PATH=${DIR}/easy_english_${DATE} FIFO_PATH=${DIR}/ebsfifo URL="mmst://219.240.37.11/L-FM_300k" mkfifo ${FIFO_PATH} ${LAME} -q2 -b 128 ${FIFO_PATH} ${FILE_PATH}.mp3 & ${MPLAYER} ${URL} -ao pcm:file=${FIFO_PATH} & sleep ${DURATION} /usr/bin/killall mplayer /usr/bin/killall lame /bin/rm -f ${FIFO_PATH}다 덤벼! 다 받아줄께!!
다 덤벼! 다 받아줄께!!
오랫동안 꿈을
실수로 댓글쓰기 버튼을 눌러버렸네요 -_-;; 죄송죄송;;
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
인코딩 변경
예전에 어디서 퍼온 것 같은데..... 그대로 쓰는 건지 조금 수정한건지 기억은 안나네요..
$HOME/bin에 넣어두고 씁니다.
euckr->utf8으로 물론 반대도 있죠.ㅎㅎ
#!/bin/bash if [ $# -lt 1 ] then echo "Try 'euc2utf --help' for more information." elif [ "$1" = "--help" ] then echo "Convert EUC-KR format text to UTF-8" echo "euc2utf8 [filename]" else while [ "$1" != "" ] ; do iconv -c -f euc-kr -t utf-8 "$1" > "$1.tmp" mv -f "$1.tmp" "$1" shift 1 done fi=> 쓰려고 하니.. 갑자기 버그가 보이네요..
"$1.tmp"라는 파일이 이미 존재하면 대략 낭패일듯.. ㅎㅎㅎ
#!/bin/sh if [ $# -lt 1 ]
#!/bin/sh if [ $# -lt 1 ] then echo "Try 'euc2utf --help' for more information." elif [ "$1" = "--help" ] then echo "Convert EUC-KR format text to UTF-8" echo "euc2utf8 [filename]" else while [ "$1" != "" ] ; do TMPFILE=`mktemp /tmp/$1.XXXXXX` || exit 1 iconv -c -f euc-kr -t utf-8 "$1" > "$TMPFILE" mv -f "$TMPFILE" "$1" shift 1 done fi----
내 블로그: http://unipro.tistory.com
내 블로그: http://unipro.tistory.com
어찌나 행이잘걸리는지...
vi j.sh
#!/bin/bash
jdown;jboot
고통이 지천에 있다한들 어이해 멈출수있더냐
스크립트인지는 모르겠습니다만..
요즘 많이 쓰는 명령은 이렇습니다 -_-;
$ python
>> 100 + 128 [Enter]
A rose is a rose is a rose..
계산기는 bc 가
계산기는 bc 가 좋던데요..^^;
메일 : 편하게
메일 :
편하게 메모할려고 사용하고 있습니다
alias memo='echo -e "\n-------------------------------------------------\n`date +%c`\n-------------------------------------------------\n" >> /home/namsa/my/memo ;vi /home/namsa/my/memo +'
아래건 일기장
alias daily='echo -e "\n-------------------------------------------------\n`date +%c`\n-------------------------------------------------\n" >> /home/namsa/my/daily/`date +%F` ;vi /home/namsa/my/daily/`date +%F` +'
메일 : nan1004au@gmail.com
댓글 달기