以下脚本把所有要编辑的源文件备份到/bak目录下,并且所有的路径位置保持不变,比如vii /etc/hosts,则把/etc/hosts复制到/bak/etc/hosts。 
# cat /sh/vii 
#!/usr/bin/bash 
#判断源文件是否存在,存在才执行备份操作 
if [ -f "$1" ];then 
#创建函数,可实现任意键继续 
#如果你的机器上不认stty raw那么把函数中两处出现的raw换成cbreak 
get_char() 
{ 
SAVEDSTTY=`stty -g` 
stty -echo 
stty raw 
dd if=/dev/tty bs=1 count=1 2> /dev/null 
stty -raw 
stty echo 
stty $SAVEDSTTY 
} 
#创建备份的根路径/bak,并让所有人具有写权限 
if [ ! -d "/bak" ];then 
mkdir /bak 
chmod a+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 -R a+w /bak/${patha%%/*} 
fi 
#复制目标文件 
datenow=`date +%Y%m%d` 
timenow=`date +%H%M%S` 
/usr/bin/cp $1 ${path}/${1##*/}.${datenow}.${timenow} 
echo "Target file \"$1\" 
has been copied to ${path}/${1##*/}.${datenow}.${timenow}" 
echo "Now going to \"vi $1\",Press any key to continue..." 
char=`get_char` 
fi 
#调用vi命令 
vi $1 
调用脚本 
# chmod a+x /sh/vii 
# /sh/vii /etc/passwd 
你可以把/sh加入到PATH变量中,这样就更方便了。 
同理,涉及cp/mv命令时最好也备份一下目标文件,以免被意外覆盖。
      
利用Shell脚本来实现vi/cp/mv前自动备份源文件
内容版权声明:除非注明,否则皆为本站原创文章。
