以下脚本把所有要编辑的源文件备份到/bak目录下,并且所有的路径位置保持不变,比如vi /etc/hosts,则把/etc/hosts复制到/bak/etc/hosts。
- #cat/sh/vii
- #!/usr/bin/bash
- #判断源文件是否存在,存在才执行备份操作
- if[-f"$1"];then
- #创建函数,可实现任意键继续
- #如果你的机器上不认sttyraw那么把函数中两处出现的raw换成cbreak
- get_char()
- {
- SAVEDSTTY=`stty-g`
- stty-echo
- sttyraw
- ddif=/dev/ttybs=1count=12>/dev/null
- stty-raw
- sttyecho
- stty$SAVEDSTTY
- }
- #创建备份的根路径/bak,并让所有人具有写权限
- if[!-d"/bak"];then
- mkdir/bak
- chmoda+w/bak
- fi
- #判断目标文件所处的路径并创建,让所有人对新创建的任一级目录均具有写权限
- echo$1|grep"/">/dev/null
- if["`echo$?`"="0"];then
- cd${1%/*}
- fi
- pwdnow=`pwd`
- path=/bak${pwdnow}
- #echo$path
- if[!-d"$path"];then
- mkdir-p$path
- patha=${pwdnow#/}
- chmod-Ra+w/bak/${patha%%/*}
- fi
- #复制目标文件
- datenow=`date+%Y%m%d`
- timenow=`date+%H%M%S`
- /usr/bin/cp$1${path}/${1##*/}.${datenow}.${timenow}
- echo"Targetfile"$1"
- hasbeencopiedto${path}/${1##*/}.${datenow}.${timenow}"
- echo"Nowgoingto"vi$1",Pressanykeytocontinue..."
- char=`get_char`
- fi
- #调用vi命令
- vi$1
- 调用脚本
- #chmoda+x/sh/vii
- #/sh/vii/etc/passwd
你可以把/sh加入到PATH变量中,这样就更方便了,同理,涉及cp/mv命令时最好也备份一下目标文件,以免被意外覆盖。