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

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 rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password

else

cd $PATH &&\

rsync -az ./ --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.piassword

fi

done

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

  • sh -x 的验证过程

[root@nfs01 scripts]# vim jiankong2.sh

#cd $PATH &&\

do

if [ -f $line ];then

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

echo $PATH

echo 03

rsync -az $line --delete rsync_backup@$IP::nfsbackup --

password-file=/etc/rsync.password

else

echo 01

echo $PATH

sh -x 查看过程

[root@nfs01 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 rsync_backup@172.16.1.41:

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 rsync_backup@172.16.1.41:

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

+ read line

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

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

[root@nfs01 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 rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password

else

#cd $PATH &&\

rsync -az $WEIZHI --delete rsync_backup@$IP::nfsbackup --password-file=/etc/rsync.password

fi

done

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

  • 解决方法二

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

/usr/bin/rsync

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

shell脚本中定义路径变量出现的BUG的更多相关文章

  1. shell脚本中特定符合变量的含义

    shell脚本中特定符合变量的含义: $#   传递到脚本的参数个数 $*    以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$    脚本运行的当前进程PID号 ...

  2. shell脚本中一些特殊变量

    在shell脚本中,一些常见的特殊变量表示方式还是需要知道的 如下就是一些经常用到的特殊变量表示方法: $0    当前脚本名$1 $2...    传入脚本or函数的参数(大于10需大括号括起来)$ ...

  3. shell脚本中处理 路径中中文和空格方法

    OLDIFS=$IFS IFS=$'\n' #存放路径的变量在引用时都使用双引号括起来 "$VAR_PATH" #路径拼接时后续的旧不需要加双引号了"$VAR_PATH& ...

  4. Shell脚本中变量和函数变量的作用域

    (1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止.(2)Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变 ...

  5. shell脚本中局部变量local

    shell脚本中局部变量 在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是gl ...

  6. 让shell脚本中的echo输出带颜色

    转载自:http://www.linuxidc.com/Linux/2014-12/110463.htm 让echo输出带颜色的方法有两种 1.在shell脚本中定义颜色变量,使用echo -e调用变 ...

  7. linux crontab执行shell脚本中包含相对路径的问题

    实例一 test.sh文件 echo `date`>test.log 配置crontab 设置 */1 * * * * sh /data/test.sh 在/data/目录下,未找到test.l ...

  8. shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...

  9. Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...

随机推荐

  1. SQL 连接(JOIN)

    SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来. SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JO ...

  2. Nginx在Linux下的安装部署

    Nginx简单介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 server,也是一个 IMAP/POP3/SMTP server.Nginx作为 ...

  3. unique函数(STL)

    unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数,所以头文件 ...

  4. 使用Blender批量导出/转换模型

    2.4版本号的Blender API和2.5以上版本号的API有非常大的不同,这里仅仅是提供了思路和2.4版本号的导出方案. 先提供一个脚本,这个是由Blender调用的.用于转换Ogre的Mesh文 ...

  5. UVa 401 Palindromes(镜像回文字符串)

     题意  给一个字符串 判定其是否为回文串和镜像串  回文串非常好推断  镜像串对于每个字符用数组保存它的镜像字符即可了  没有的就是空格 注意若字符串长度为奇数  中间那个字母必须是对称的才是镜 ...

  6. 在类的头文件里尽量少引入其它头文件 <<Effective Objective-C>>

    与C 和C++ 一样,Objective-C 也使用"头文件"(header file) 与"实现文件"(implementation file)来区隔代码.用 ...

  7. Matplotlib绘图基础

    import matplotlib.pyplot as plt import numpy as np #绘图流程 x=np.linspace(-1,1,100) y=x**2 plt.plot(x,y ...

  8. PHP出现Warning: A non-numeric value encountered问题的原因及解决方法

    本文介绍php出现Warning: A non-numeric value encountered问题,用实例分析出现这种错误的原因,并提供避免及解决问题的方法. <?php error_rep ...

  9. mysql 5.5安装不对容易出现问题

    按照正常步骤安装完了mysql 5.5之后,再运行一下bin目录中的mysqlinstanceconfig.exe,重置一下密码!!!! 重置密码的地方:modify security setting ...

  10. HDU1754 —— I Hate It 线段树 单点修改及区间最大值

    题目链接:https://vjudge.net/problem/HDU-1754 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜 ...