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

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. icvSetWeightsAndClasses

    /* *icvSetWeightsAndClasses *作用:给训练样本的权重和类别赋值 */ static void icvSetWeightsAndClasses( CvHaarTraining ...

  2. c++中拷贝构造函数,浅拷贝和深拷贝的区别

    在C++提供了一种特殊的构造函数,称为拷贝构造函数.拷贝构造函数具有一般构造函数的所有特性,其作用是使用一个已经存在的对象(由拷贝构造函数的参数指定的对象)去初始化一个新的同类对象,即完成本类对象的复 ...

  3. Unity5.1 新的网络引擎UNET(八) UNET 系统概括

     孙广东   2015.7.12 Server and Host 在Unity 的 网络系统,游戏有 一个server和多个client. 当没有专用的server时,client之中的一个扮演s ...

  4. Making User-Managed Backups-17.3、Making User-Managed Backups of Offline Tablespaces and Datafiles

    17.3.Making User-Managed Backups of Offline Tablespaces and Datafiles 备份离线的表空间时.须要注意下面指导原则: (1)不能离线s ...

  5. 《31天成为IT服务达人》--做事篇(第四章)之如何找目标

     前面介绍了什么是IT服务.以下几章将介绍IT服务该怎么做.在聊怎么做之前.想起几句流行的告白和准备入行IT服务事业的朋友共勉. 当你的才华 还撑不起你的野心时 就应该静下心来 学习 --- 当你 ...

  6. (1)数据库和MySql初步认识

    一,数据的保存: 数据可以通过很多方式进行保存,不用的保存方式对于所保存的数据的影响各有不同. 1,数据保存在内存中:读写速度很快:但是随着程序的关闭数据会丢失,而且内存容量相对小,价格昂贵 2,数据 ...

  7. HTTP网络请求原理 (三) 简单模拟HTTP服务器

    HTTP实际上是基于TCP的应用层协议,它在更高的层次封装了TCP的使用细节,是网络请求操作更为易用. TCP连接是因特网上基于流的可靠连接,它为HTTP提供了一条可靠的比特传输管道. 从TCP连接一 ...

  8. mac终端命令加密压缩文件为zip包

    mac终端命令加密压缩文件为zip包,命令如下: zip -e ~/desktop/a.zip b.doc c.txt d.sql 注释:a.zip为加密后的文件 b.doc c.txt d.sql为 ...

  9. BZOJ_4566_[Haoi2016]找相同字符_后缀自动机

    BZOJ_4566_[Haoi2016]找相同字符_后缀自动机 Description 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有 ...

  10. AutoIT: WinSetState可以定义窗口大小

    Example() FuncExample() ; Run Notepad Run("notepad.exe") ; Wait seconds for the Notepad wi ...