shell脚本中定义路径变量出现的BUG

Posted 王晓冬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本中定义路径变量出现的BUG相关的知识,希望对你有一定的参考价值。

===========================================================================

if 语句中的定义路径变量 引发命令的PATH路径改变出现的bug 问题

  • 原脚本文件:inotify +rsync 实时共享

#!/bin/bash

PATH=/data/

IP=172.16.1.41

cd $PATH &&\ 切换到一个新的变量中了

/usr/bin/inotifywait -mrq --format ‘%w%f‘ -e create,moved_to,close_write,delete $PATH|while read line

do

  if [ -f $line ];then此时的rsync命令就已经不能使用了 (解决方法 绝对路径)/usr/bin/rsync

    rsync -az $line --delete [email protected]$IP::nfsbackup --password-file=/etc/rsync.password

  else

    cd $PATH &&\

    rsync -az ./ --delete [email protected]$IP::nfsbackup --password-file=/etc/rsync.piassword

  fi

done

===========================================================================

  • sh -x 的验证过程

[[email protected] scripts]# vim jiankong2.sh

#cd $PATH &&\

do

  if [ -f $line ];then

    echo 01 在此特别增加了显示内容方便定位到当前变量路径

    echo $PATH

    echo 03

    rsync -az $line --delete [email protected]$IP::nfsbackup --

password-file=/etc/rsync.password

  else

    echo 01

    echo $PATH

sh -x 查看过程

[[email protected] scripts]# sh -x  jiankong2.sh

+ PATH=/data/

+ IP=172.16.1.41

+ read line

+ /usr/bin/inotifywait -mrq --format %w%f -e create,moved_to

+ ‘[‘ -f /data/oldgirl ‘]‘

+ echo 01

01

+ echo /data/  PATH变量的路径转换为/data/ 所以命令会在此读取路径

/data/

+ echo 03

03

+ rsync -az /data/oldgirl --delete [email protected]:

jiankong2.sh: line 13: rsync: command not found 结论:果真报错 命令找不到

+ read line

+ ‘[‘ -f /data/oldgirl ‘]‘

+ echo 01

01

+ echo /data/

/data/

+ echo 03

03

+ rsync -az /data/oldgirl --delete [email protected]:

jiankong2.sh: line 13: rsync: command not found  同样的命令找不到

+ read line

===========================================================================

  • 解决方法一 定义变量要和PATH区分开 删除cd 到的变量路径

[[email protected] scripts]# cat  jiankong2.sh

#!/bin/bash

WEIZHI=/data/

IP=172.16.1.41

#cd $PATH &&\

/usr/bin/inotifywait -mrq --format ‘%w%f‘ -e create,moved_to,close_write,delete $WEIZHI|while read line

do

  if [ -f $line ];then

    rsync -az $line --delete [email protected]$IP::nfsbackup --password-file=/etc/rsync.password

  else

  #cd $PATH &&\

    rsync -az $WEIZHI --delete [email protected]$IP::nfsbackup --password-file=/etc/rsync.password

  fi

done

===========================================================================

  • 解决方法二

使用绝对路径可以跳出当前定义PATH环境

/usr/bin/rsync

===========================================================================

以上是关于shell脚本中定义路径变量出现的BUG的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本

linux下shell脚本中sqlplus调用shell变量的问题

shell编程—变量

shell脚本基础----变量

Shell脚本应用(shell脚本基础与shell变量)

如何在linux shell脚本中使用变量遍历路径