| # to change current path using a customized script function # instead of using alias. Need put this function in .bashrc # e.g., # mycd ex1 ==> cd ~/scripttest/ex1 # mycd ex2 ==> cd ~/scripttest/ex2 # mycd eX2 ==> cd ~/scripttest/ex2 # @ http://scriptdemo.blogspot.com function mycd (){ if [ $# -ne 1 ]; then echo "Usage:" echo " mycd foldername" else targetF=`echo $1 | awk '{print tolower($1)}'` targetP=${HOME}/scripttest/${targetF} if [ -d ${targetP} ]; then eval "cd ${targetP}" else echo "${targetP} does not exist!" fi unset targetF fi } |
Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts
Tuesday, November 20, 2012
[Bash] change current workspace by calling a script function
Thursday, July 5, 2012
[Bash] mail2me: send email with attachments from terminal
This is mutt version. A "mail" version is here.
| #!/bin/bash # send files to an email account as the attachment(s) # usage: # mail2me email -s 'YourSubject' YourAttachments # http://scriptdemo.blogspot.com function isEmail() { cEmail=`echo $1 | grep "^[a-zA-Z]\+\([._][a-zA-Z0-9]\+\)*@\([a-zA-Z0-9]\+\.\)\+[a-zA-Z]\{2,3\}$"` if [ ${#cEmail} -gt 0 ]; then echo "true" else echo "false" fi } function isServerOn() { myS=$1 myp=`ping -c 2 ${myS} 2>&1 | grep "% packet" | awk '{print $6*100}'` if [ ${#myp} -eq 0 ]; then echo "-1" #server: ${myS} is not valid elif [ ${myp} -eq 100 ]; then echo "0" #server: ${myS} is off else echo "1" #server: ${myS} is $(( 100 - ${myp}))% response fi } if [ $# -le 1 ]; then echo "usage: mail2me email -s Subject file1 [file2] ..." exit fi #check email targetEmail=$1 isValidEmail=`isEmail ${targetEmail}` [ ${isValidEmail} == "false" ] && echo "${targetEmail} is not a valid email address!!!" && exit #check smtp server smtpS=`echo ${targetEmail} | awk -F\@ '{print $2}'` smtpS="smtp.${smtpS}" isOnline=`isServerOn ${smtpS}` if [ ${isOnline} == "-1" ]; then echo "SMTP server: ${smtpS} is invalid. STOP" && exit elif [ ${isOnline} == "0" ]; then echo "SMTP server: ${smtpS} is offline. STOP" && exit fi #send email numF=0 nf=2 isDebug=0 shift #shift the email while [ $# -ge 1 ] do case $1 in -s|-S) mysubj=$2 shift; shift; ;; -d|-D) isDebug=1 shift ;; *) if [ -f ${tmpfn} ]; then myfile[${numF}]=$1 numF=`expr ${numF} + 1` else echo "$1 is not found!" fi shift ;; esac done if [ ${numF} -eq 1 ]; then [ ${#mysubj} -eq 0 ] && mysubj="[script] ${myfile[0]}" elif [ ${numF} -gt 1 ]; then [ ${#mysubj} -eq 0 ] && mysubj="[script] backup ${myfile[0]} etc." else echo "no file is found!!!" && exit fi if [ ${isDebug} -eq 1 ]; then echo "echo \"The attachment is ${myfile[*]} sent by `whoami` from `hostname`\" | mutt -s '${mysubj}' -a ${myfile[*]} -- ${targetEmail}" else echo "The attachment is ${myfile[*]} sent by `whoami` from `hostname` " | mutt -s "${mysubj}" -a ${myfile[*]} -- ${targetEmail} fi |
Labels:
attachment,
linux,
mail,
multiple,
mutt,
script,
send email from terminal
Friday, May 25, 2012
[Bash] send email with an attachment from Terminal
Enhanced version of back-up-text-files-using-mail-function
Also check mutt .
Also check mutt .
| #!/bin/bash # send email with a file as the attachment # usage: # mailit email files # http://scriptdemo.blogspot.com # note: # some old versions do not support the attachment option # [tested with Heirloom mailx 12.5] function isEmail() { cEmail=`echo $1 | grep "^[a-zA-Z]\+\([._][a-zA-Z0-9]\+\)*@\([a-zA-Z0-9]\+\.\)\+[a-zA-Z]\{2,3\}$"` if [ ${#cEmail} -gt 0 ]; then echo "true" else echo "false" fi } function isServerOn() { myS=$1 myp=`ping -c 2 ${myS} 2>&1 | grep "% packet" | awk '{print $6*100}'` if [ ${#myp} -eq 0 ]; then echo "-1" #server: ${myS} is not valid elif [ ${myp} -eq 100 ]; then echo "0" #server: ${myS} is off else echo "1" #server: ${myS} is on or partly responses fi } if [ $# -le 1 ]; then echo "usage: mailit email file1 [file2] ..." exit fi #check email address targetEmail=$1 isValidEmail=`isEmail ${targetEmail}` [ ${isValidEmail} == "false" ] && echo "${targetEmail} is not a valid email address!!!" && exit #check smtp server smtpS=`echo ${targetEmail} | awk -F\@ '{print $2}'` smtpS="smtp.${smtpS}" isOnline=`isServerOn ${smtpS}` if [ ${isOnline} == "-1" ]; then echo "SMTP server: ${smtpS} is invalid. STOP" && exit elif [ ${isOnline} == "0" ]; then echo "SMTP server: ${smtpS} is offline. STOP" && exit fi #send email for (( nf=2; nf<=$#; nf++ )) do eval "myfile=\$${nf}" if [ -f ${myfile} ]; then echo "The attachment is ${myfile} sent by `whoami` from `hostname`" > tmpcont.mailtomea mail -s "[script] ${myfile}" -a ${myfile} ${targetEmail} < tmpcont.mailtomea && \ echo "send mail successfully" && \ rm -f tmpcont.mailtomea else echo "${myfile} dos not exist" fi done |
Labels:
attachment,
bash,
email,
linux,
online,
script,
send email from terminal,
server,
validate email
Friday, May 18, 2012
[Bash] ris2bib: convert RIS citation file to bibtex format
| #!/bin/bash # convert ris format to bibtex format # usage: # ris2bib.sh ris-file(s) # www.scriptdemp.blogspot.ca getCTag() { for cTag in $* do nl=`grep "^${cTag}" ${ris} | wc -l` [ ${nl} -ne 0 ] && echo "${cTag}" && exit done echo "" } [ $# -eq 0 ] && sed -n '2,5p' `which ris2bib.sh` && exit for ris in $* do if [ -e ${ris} ]; then dos2unix ${ris} auTag=`getCTag AU A1 A2` tlTag=`getCTag T1 TI` joTag=`getCTag JO JA` yrTag=`getCTag PY Y1` doTag=`getCTag M3 DO` voTag="VL"; spTag="SP"; epTag="EP"; urTag="UR"; isTag="IS" publisher=`grep "^PB\ " ${ris} | awk -F\- '{print $2}' | sed -e 's/^\ //g'` authorList0=`grep "^${auTag}\ " ${ris} | awk -F\- '{print $2"@"}'` authorList=`echo ${authorList0} | sed -e 's/^\ //g' -e 's/\.\ /\./g' -e "s/\@$//" | sed -e 's/@/\ and\ /g'` titleStr=`grep "^${tlTag}\ " ${ris} | cut -c7-` jourStr=`grep "^${joTag}\ " ${ris} | awk -F\- '{print $2}' | sed -e 's/^\ //g'` volStr=`grep "^${voTag}\ " ${ris} | awk -F\- '{print $2}' | sed -e 's/\ //g'` SPStr=`grep "^${spTag}\ " ${ris} | awk -F\- '{print $2}' | sed -e 's/\ //g'` EPStr=`grep "^${epTag}\ " ${ris} | awk -F\- '{print $2}' | sed -e 's/\ //g'` if [ ${#EPStr} -ne 0 ]; then pageStr="${SPStr}--${EPStr}" else pageStr=${SPStr} fi if [ ${#isTag} -ne 0 ]; then isnStr=`grep "^${isTag}\ " ${ris} | cut -c7-` fi yearStr=`grep "^${yrTag}\ " ${ris} | awk -F\- '{print $2}' | sed -e 's/\ //g' | cut -c-4` if [ ${#doTag} -ne 0 ]; then doiStr=`grep "^${doTag}\ " ${ris} | awk -F\- '{print $2}' | rev | awk -F\: '{print $1}' | rev | sed -e 's/^\ //g'` fi if [ ${#urTag} -ne 0 ]; then urlStr=`grep "^${urTag}\ " ${ris} | awk -F\- '{print $2}' | sed -e 's/^\ //g'` fi #generate the key mykey=`echo ${authorList} | awk -F\, '{print $1}'` mykey="${mykey}${yearStr}" titleKey=`echo ${titleStr} | awk '{print $1""$2}'` mykey=`echo "${mykey}${titleKey}" | awk '{print tolower($0)}' | sed -e 's/\-//g'` echo "" echo @article{"${mykey}," echo " author={${authorList}}," echo " title = {{${titleStr}}}," echo " journal = {${jourStr}}," echo " year = {${yearStr}}," echo " volume = {${volStr}}," [ ${#isnStr} -ne 0 ] && echo " number = {"${isnStr}"}," [ ${#doiStr} -ne 0 ] && echo " doi = {"${doiStr}"}," [ ${#urlStr} -ne 0 ] && echo " url = {${urlStr}}," if [ ${#publisher} -eq 0 ]; then echo " pages = {${pageStr}}" else echo " pages = {${pageStr}}," echo " publisher = {${publisher}}" fi echo " }" unset auTag tlTag joTag voTag spTag epTag isTag else echo "" echo "${ris} is not found!" echo "" fi done |
Monday, May 7, 2012
[Bash] combine eps files into a single one
| #!/bin/bash # to combine several eps files into a single eps file # Usage: # combineEPS.sh eps-file[s] -o eps-combined.eps -nC nCol -nR nRow # e.g., # Given fig04a.eps, fig04b.eps, fig04c.eps, fig04d.eps, # to create a single 2x2 eps file, fig4.eps, just run: # combineEPS.sh fig04?.eps -o fig4.eps -nC 2 -nR 2 # # dependencies: # latex, dvips, ps2pdf, pdftops, pdfcrop # pdfcrop is from http://pdfcrop.sourceforge.net # http://scriptdemo.blogspot.ca chkcmd() { for nf in $* do isAvailable=`which ${nf} 2< /dev/null` [ ${#isAvailable} -eq 0 ] && echo 0 && exit done echo 1 } # check the dependencies isCMDOkay=`chkcmd latex dvips ps2pdf pdfcrop pdftops` if [ ${isCMDOkay} -eq 0 ]; then isCMDOay=`which latex` isCMDOay=`which dvips` isCMDOay=`which ps2pdf` isCMDOay=`which pdfcrop` isCMDOay=`which pdftops` exit fi nfile=0 isEPSFname=0 isnCol=0 isnRow=0 isDel=0 isCaption=0 [ $# -eq 0 ] && sed -n '2,9p' `which combineEPS.sh` && exit while test -n "$1" do case "$1" in -nC|-nc|-nCol|-ncol|-Ncol) nCol=$2 isnCol=1 shift shift ;; -nR|-nr|-nRow|-Nrow|-nrow) nRow=$2 isnRow=1 shift shift ;; -title|-Title|-Caption|-caption) myCaption=$2 isCaption=1 shift shift ;; -d|-delete|-del|-D) isDel=1; shift ;; -o|-O) epsfname=$2 isEPSFname=1 shift shift ;; *) sufstr=`echo $1 | awk -F. '{print $2}'` if [ ${#sufstr} -eq 0 ]; then tmpfile="$1".eps [ -f ${tmpfile} ] && epsfile[$nfile]=${tmpfile}.eps elif [ $sufstr == "eps" ]; then [ -f $1 ] && epsfile[$nfile]=$1 fi nfile=`expr $nfile + 1` shift ;; esac done [ ${isEPSFname} -eq 0 ] && epsfname="eps-combined.eps" if [ ${isnCol} -eq 1 ] && [ ${isnRow} -eq 0 ]; then nRow=`echo "${nfile}/${nCol}" | bc -l | awk '{ if ($1 == int($1)) {printf "%d\n", $1} else { if ($1>0) {printf "%d\n",int($1)+1 } else {printf "%d\n",int($1)} } }'` fi if [ ${isnRow} -eq 1 ] && [ ${isnCol} -eq 0 ]; then nCol=`echo "${nfile}/${nRow}" | bc -l | awk '{ if ($1 == int($1)) {printf "%d\n", $1} else { if ($1>0) {print "%d\n",int($1)+1 } else {printf "%d\n",int($1)} } }'` fi if [ $isnRow -eq 0 ] && [ $isnCol -eq 0 ]; then nCol=1 nRow=${nfile} fi colstr=`printf "%*s\n" ${nCol} " " | sed -e 's/\ /c/g'` nwidth=$(printf "%.2f\n" `echo "1/${nCol}" | bc -l`) [ ${nwidth} == "1.00" ] && nwidth="" #echo -e "nCol=${nCol}\nnRow=${nRow}\nnWid=${nwidth}" # header of tex file texfile=${epsfname%.*}.tex dvifile=${epsfname%.*}.dvi psfile=${epsfname%.*}.ps logfile=${epsfname%.*}.log auxfile=${epsfname%.*}.aux pdfname=${epsfname%.*}.pdf header[0]='\documentclass[letterpaper,12pt]{article}' header[1]='\usepackage{epsfig}' header[2]='\begin{document}' header[3]='\thispagestyle{empty}' header[4]='\begin{figure}' header[5]='\centering' header[6]="\begin{tabular}{${colstr}}" printf "%s\n" ${header[*]} > ${texfile} n=0 nfileC=`expr ${nfile} - 1` for nL in `seq 1 ${nRow}` do for nC in `seq 1 ${nCol}` do if [ $n -lt ${nfile} ]; then epsname=${epsfile[$n]} if [ ${nC} -eq ${nCol} ]; then if [ ${nL} -eq ${nRow} ]; then tmpstr="" else tmpstr=" \\\\" fi else tmpstr=" &" fi [ ${n} -eq ${nfileC} ] && tmpstr="" figline[$n]="\epsfig{file=${epsname},width=${nwidth}\linewidth,clip=}${tmpstr}" #printf "%s\n" "${figline[$n]}" >> ${texfile} n=`expr $n + 1` fi done done printf "%s %s\n" ${figline[*]} >> ${texfile} # tail of tex file mytail[0]="\end{tabular}" if [ ${isCaption} -eq 1 ]; then mytail[1]="\caption${myCaption}" else mytail[1]="" fi mytail[2]="\end{figure}" mytail[3]="\end{document}" printf "%s\n" ${mytail[*]} >> ${texfile} #compile the tex file latex ${texfile} dvips -t letter -Ppdf -o ${psfile} ${dvifile} && rm -f ${dvifile} ps2pdf ${psfile} && rm -f ${psfile} ${auxfile} ${logfile} [ ${isDel} -eq 1 ] && rm -f ${texfile} # crop the pdf file pdfname=${epsfname%.*}.pdf pdfcrop ${pdfname} && mv ${pdfname%.*}-crop.pdf ${pdfname} && pdftops -eps ${pdfname} ${epsfname} |
Labels:
combine eps,
crop pdf,
latex,
linux,
script
Subscribe to:
Posts (Atom)