伟的博客 研发工程师

几个常用的shell编程

2007-07-06

13:42:27-exp~/应用/脚本$● cat import-截图
#!/bin/bash
#import -window root ${FNAME}.${EXT}

#apt-get install imagemagick
# parameter can be : w.id w.class
NOW=date '+%Y-%m-%d-%H-%M-%S'
if [ -z $2 ]; then
FNAME=screenshot-${NOW}
else
FNAME=”[$2]-${NOW}”
fi
EXT=png

SCRDIR=${HOME}/下载/
if [ ! -d “${SCRDIR}” ]; then
mkdir -p “${SCRDIR}”
fi

# 延时4秒
# sleep 4

#import -window root “$HOME/Desktop/${FNAME}.${EXT}”
if [ -z $1 ]; then
cmd=”import ${SCRDIR}${FNAME}.${EXT}”
else
cmd=”import -window $1 ${SCRDIR}${FNAME}.${EXT}”
fi
#echo $cmd>${SCRDIR}/w.info
eval $cmd

        代码:           13:42:40-exp~/应用/脚本$●  cat man-zh_CN转换到utf8.bash     #!/bin/bash   

cd /usr/share/man/zh_CN/
for k in *
do
cd $k
for i in *.gz
do
# j=echo $i|awk -F'.gz' '{print $1}' # 不知道有什么好方法
j=echo ${i%\.gz}
gunzip $i
iconv -f gb18030 -t utf8 $j >tmp
mv tmp $j
gzip $j
done
cd ..
done

        代码:           13:43:19-exp~/应用/脚本$●  cat jpg改目录名.bash     #!/bin/bash  

#整理当前目录下的jpg图片名字,按照目录名字排序。
dir=pwd
#[ $1 ] && dir=dirname $1 && cd $dir;
dir=${dir##\/*\/}
#:>~/tmp
#echo $dir — »~/tmp
#pwd»~/tmp
#exit 0

num=0
for i in *.jpg
do
#符合规则的文件不需要修改
if [ expr match "$i" "${dir}-[0-9]*.jpg$" != 0 ]; then
tmp=${i#”$dir”-}
tmp=${tmp%”.jpg”}
# echo ${tmp} ———————-
if [ “$tmp” -le “$num” ]; then
echo $i 符合规则,不修改。当前排序已到 $num。
continue
fi
fi
result=”$dir”-$num.jpg
#防止覆盖已有文件
while [ -e “$result” ]
do
((num++))
result=”$dir”-$num.jpg
done
# i=echo $i | sed 's/\ /\\\ /g'
# result=echo $result | sed 's/\ /\\\ /g'
# | sed ‘s/(/\(/g’ | sed ‘s/)/\)/g’
echo $i ‘->’ $result
mv “$i” “$result”
((num++))
done

        代码:           13:43:26-exp~/应用/脚本$●  cat 移动所选文件到目录.bash     #!/bin/bash  

#移动所选文件到:某个目录(支持列表)。
#echo $* > ~/tmp
#echo pwd » ~/tmp
#exit
#———— 产生自动目录 ———-
#rm ~/tmp
dir=dirname $1
dir=pwd
current_dir=${dir##\/*\/};num=0
auto_dir=./${current_dir}-自动-${num}
#${dir}
while [ -d ${auto_dir} ]
do
((num ++))
if ((num>100)); then exit; fi
auto_dir=./${current_dir}-自动-${num}
done
#———— 选择窗口 ————-
item=zenity --width=600 --height=300 --title='移动所选文件到:' --list --text='将移动到以下目录,请选择' --column='目录列表' --column='说明' ${auto_dir} 自动排序生成的目录 $HOME 家目录 ${HOME}/媒体 媒体目录 ${HOME}/下载 下载目录 ${HOME}/文档 文档目录 other... 新建或者打开其他目录

#———— 选择其他目录 ————-
if [ ${item} == “other…” ]; then
item=zenity --file-selection --directory --title=选择其他目录
fi

[ -z ${item} ] && exit 1;
if [ ! -d ${item} ]; then
eval mkdir “’”${item}”’”
fi

while [ $# -gt 0 ]; do
eval mv “’“$1”’” “’”${item}\/”’”

shift
done
exit 0

        代码:           13:44:02-exp~/应用/脚本$●  cat z_批量改名v3      #!/bin/bash  

dir=${1%\/*}
cd $dir

if((“$#”<1));then
zenity –info –title=”用法介绍” –text=” \
在文件管理器中,选择需要修改的文件,使用右键菜单中“脚本” \
-“批量改名”。在提示窗口输入如“Zh_%.jpg”格式的信息。\
参数中用%号表示递增的序号。 \
智能处理了原文件名符合修改后条件的情况,直接不处理。 \
显示为“不需要修改”。 \
最关键的一个地方要感谢x.f的帮助才完成。 \
已经修改成可以处理空格文件。 \
2005年10月10日 eexpress 第3版\

exit 1
fi
tmp=””
until [ $tmp != “” ]; do
new_format=zenity --title="输入新格式" --entry --text="将修改"'$#'"个文件,请输入新文件名格式。在提示窗口输入如“Zh__%.jpg”格式的信息。参数中用%号表示递增的序号。"
if [ “$new_format” = “” ]; then exit 1; fi #no input or cancel pressed
tmp=echo $new_format|grep "%"
if [ “$tmp” = “” ]; then
zenity –info –title=”输入错误” –text=”格式中需要一个%号表示递增的文件序号。”
fi
done

:>tmpfile
number=0
already_exist=””
#while [ “$#” -lt 0 ] #至少还有1个参数
while ((“$#”>0)) #至少还有1个参数
do
if [ ! -f “$1” ]; then
echo “指定文件 $1 不是文件或者不存在。” » tmpfile
shift
continue
fi
echo -n “$1 -> “ » tmpfile

      tmp=`echo $already_exist|grep "$1"`  
      if [ "$tmp" != "" ]; then  
              echo "不需要修改" >> tmpfile  
              shift  
              continue  
      fi  

      J=`echo $new_format | sed s/%/$number/`  
      while [ -e "$J" ]  
      do  
              already_exist="$already_exist $J"  
              ((number++))  
              J=`echo $new_format | sed s/%/$number/`  
      done  
      echo $J >> tmpfile  
      mv "${1##\/*\/}" "$J"  
      ((number++))  
      shift     done     zenity --info --title="修改完成" --text="`cat tmpfile`"     rm tmpfile     exit 0     #end         

        代码:           13:44:44-exp~/应用/脚本$●  cat mv_jpg_to_dir.bash     #!/bin/bash  

[ -z $1 ] && exit 1;
[ ! -d $1 ] && mkdir “$1”
mv *.jpg *.jpeg “$1”

        代码:           13:44:51-exp~/应用/脚本$●  cat switch-开关触摸板.bash     #!/bin/bash  

ts=synclient -l|grep TouchpadOff
ts=${ts#*= }
if((“$ts” == 0))
then
synclient TouchpadOff=1
else
synclient TouchpadOff=0
fi

        代码:           13:45:11-exp~/应用/脚本$●  cat swap-交换鼠标按键.bash     #!/bin/bash  

but=xmodmap -pp|head -n 1|cut -d ' ' -f 3
((but++))
ret=””
ret=xmodmap -pp|grep "3.*1"
if [ -z “$ret” ]
then
prefix=”xmodmap -e "pointer = 3 2 1 4 5 6 7 8 9”
else
prefix=”xmodmap -e "pointer = 1 2 3 4 5 6 7 8 9”
fi
cmd=${prefix%${but}*}’”’
eval $cmd

        代码:           13:45:33-exp~/应用/脚本$●  cat shadow-pic.bash     #!/bin/bash  

#产生阴影图片效果。
#for i in S*.png; do ./shadow-pic.bash $i; done;

# 取得图片宽度
w=identify """$*"""; w=${w#PNG\ }; w=${w%%\ ?};
#convert “””$””” -shadow 80x5+4+4 -resize 48 s-“””$”””
# 添加阴影
convert “””$””” -shadow 80x5+5%+5% s-“””$”””
#convert “””$””” -channel RGBA -gaussian 0x6 s-“””$”””
# 叠加原图
composite -compose over “””$””” s-“””$””” s-“””$”””
# 恢复图片尺寸
convert s-“””$
””” -resize $w s-“””$*”””

        代码:           13:45:38-exp~/应用/脚本$●  cat gnome-screenshot-截图-延时5秒     #!/bin/bash   

gnome-screenshot –delay=5

        代码:           13:46:14-exp~/应用/脚本$●  cat iconv-转换gb2312到utf8.bash     #!/bin/sh   

for i in *
do
iconv -f gb2312 -t utf8 $i >tmp
mv tmp $i
done

        代码:           13:46:27-exp~/应用/脚本$●  cat tar.gz-选定文件按照目录名打包v4     #!/bin/bash  

dir=${1%\/*}
cd $dir
NOW=date '+%Y-%m-%d %H-%M-%S'
#取得压缩包的文件名。只有一个文件时,直接使用文件名。多个文件,取目录名
[ $# -eq 1 ] && dir=$1;

#取最后一段作文件名前缀
dir=${dir##\/*\/}
tar_gz_name=”’${dir}.tar.gz’”
#处理空格和特殊符号。
cmd=”tar -zcPvf $tar_gz_name”

for i in $*
do
cmd=${cmd}” ‘${i}’”
done

#执行
#rm ~/tmp; echo $cmd»~/tmp
eval $cmd

        代码:           13:47:00-exp~/应用/脚本$●  cat resize-pic.bash     #!/bin/bash  

# for i in *.png; do ./resize-pic.bash $i; done;

# default size
def=24
# parameter 2 is redefine size
if [ -z $2 ]; then
ss=${def}
else
ss=$2
fi
# 产生固定尺寸(缺省24点宽度)的图片。
convert “”“$1””” -scale ${ss} “"”r-${ss}-$1”””

        代码:           13:47:22-exp~/应用/脚本$●  cat cmd-常用命令点击.bash     #!/bin/bash  

# 需要把执行和配置文件都 ln -s 到同一个路径。
path=readlink "$0"
path=dirname "$path"

conf=”$path/commands.ini”
[ ! -f $conf ] && echo conf-error && exit 0;
cmd=”zenity –width=400 –height=400 –title=’常用命令’ –list –column=’点击执行’”
cmd=${cmd}awk '/^$/ { next } { printf(" \"%s\"", $0) }' $conf
#for i in sed -e 's/$/"/' -e 's/^/"/' $conf
#do
#cmd=”${cmd} $i”
#done

item=eval $cmd
eval ${item} #—–中英文环境变量设置—–
alias cn=’export LC_ALL=zh_CN.UTF-8’
alias en=’export LC_ALL=C’

#—–中文帮助手册直接操作—–
alias cman=’man -M /usr/share/man/zh_CN’

#—–无线网卡开关—–
alias 0u=’sudo ifup eth0’
alias 0d=’sudo ifdown eth0’
alias 1u=’sudo ifup eth1’
alias 1d=’sudo ifdown eth1’
alias ip3322=’w3m -no-cookie -dump “http://eexpress:xxxxx@members.3322.org/dyndns/update?system=dyndns&hostname=eexpress.3322.org”’
alias getip=’w3m -no-cookie -dump www.ip138.com|grep -o “[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}”’

alias p=’ping www.163.com -c 5’
alias adsl=’pon dsl-provider’
alias down3322=”sudo /etc/init.d/apache stop”

#—–文件列表和查看—–
alias ll=’ls -lFh’
alias la=’ls -AF’
alias l=’ls -CF’

alias dog=’grep -v -E “(^$|^#)”’ # 显示有效内容,剔出空行和#号注释行
# 相同操作 grep -v -e ^# -e ^$ acpi-support
# grep ‘^[^#]’ options

alias kd=’find -type d -empty -exec rmdir {} \;’ # 删除空目录
alias rm_empty_dir=’find -type d -empty -exec rmdir {} \;’

#—–编辑—–
alias sv=’sudo vi’
alias se=’sudo mousepad’
alias e=’mousepad’
alias h=’Hypersrc.pl ‘

#—–软件包管理命令—–
alias ai=’sudo aptitude install’
alias ar=’sudo aptitude remove’
alias au=’sudo aptitude update’
alias ag=’sudo aptitude upgrade’
alias as=’aptitude search’
alias aw=’aptitude show’

#—–系统进程操作—–
alias pg=’pgrep -l’
alias sk=’sudo killall’

#—–tar常用命令,后跟压缩包名,和带全路径的操作的文件名—–
alias t.d=’tar –delete -f ‘
alias t.x=’tar xPvf ‘
alias t.l=’tar tf ‘
alias t.u=’tar uPvf ‘

#—–命令行提示符设置—–
PS1=’\t-\u\w$● ‘


Comments