首页 > 学院 > 系统知识 > 正文

Shell脚本 实现vicpmv前自动备份源文件

2022-07-08 12:10:27
字体:
来源:转载
供稿:网友
  以下脚本把所有要编辑的源文件备份到/bak目录下,并且所有的路径位置保持不变,比如vi /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命令时最好也备份一下目标文件,以免被意外覆盖。
 
 

(编辑:错新网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表