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 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的更多相关文章
- shell脚本中特定符合变量的含义
shell脚本中特定符合变量的含义: $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$ 脚本运行的当前进程PID号 ...
- shell脚本中一些特殊变量
在shell脚本中,一些常见的特殊变量表示方式还是需要知道的 如下就是一些经常用到的特殊变量表示方法: $0 当前脚本名$1 $2... 传入脚本or函数的参数(大于10需大括号括起来)$ ...
- shell脚本中处理 路径中中文和空格方法
OLDIFS=$IFS IFS=$'\n' #存放路径的变量在引用时都使用双引号括起来 "$VAR_PATH" #路径拼接时后续的旧不需要加双引号了"$VAR_PATH& ...
- Shell脚本中变量和函数变量的作用域
(1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止.(2)Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变 ...
- shell脚本中局部变量local
shell脚本中局部变量 在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是gl ...
- 让shell脚本中的echo输出带颜色
转载自:http://www.linuxidc.com/Linux/2014-12/110463.htm 让echo输出带颜色的方法有两种 1.在shell脚本中定义颜色变量,使用echo -e调用变 ...
- linux crontab执行shell脚本中包含相对路径的问题
实例一 test.sh文件 echo `date`>test.log 配置crontab 设置 */1 * * * * sh /data/test.sh 在/data/目录下,未找到test.l ...
- shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...
- Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...
随机推荐
- PHP swfupload图片上传实例
swfupload已经是第二次研究,这次自已整了个简单demo,无奈菜鸟最杯… PHP代码如下: if (isset($_FILES["Filedata"]) || !is_upl ...
- Leetcode Single Number II (面试题推荐)
还记得<剑指offer>和<编程之美>等书上多次出现的找一个数组中仅仅出现一次的数那个题吗? leetcode也有这道题 链接here 相信大家都知道用异或在O(n)的时间复 ...
- HDUJ 1203 I NEED A OFFER!
I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- flask的CBV,flash,Flask-Session,及WTForms-MoudelForm
1,CBV: from flask import vews class LoginView(views.MethodView): def get(self): return "雪雪其实也很好 ...
- C编程中fread 、fwrite 用法总结
在C语言中进行文件操作时,我们经常用到fread()和fwrite(),用它们来对文件进行读写操作.下面详细绍一下这两个函数的用法. 我们在用C语言编写程序时,一般使用标准文件系统,即缓冲文件系统 ...
- ip地址的唯一性是如何保证的
连接ISP网络时,运行商就分配了一个ip地址,所以,ip地址是运营商指定的. 账户只是控制是否可以接入而已,只要是插上网线,就已经动态分配了ip地址.
- Struts2中ValueStack结构和总结
[ValueStack和ActionContext的关系] 首先,从结构上来看ValueStack是ActionContext的一个组成部分,是对ActionContext功能的扩展.ActionCo ...
- Swift入门(十)——循环引用、弱引用和无主引用
近期看到swift里面不仅有循环引用和弱引用(weak),还加入了无主引用(unowned),于是写了一些demo,这里总结一下. 和OC一样.Swfit默认也是基于ARC进行内存管理的,因此尽管简单 ...
- 设计模式-(6)适配器 (swift版)
用来解决接口适配问题的三种模式:适配器模式,桥接模式,外观模式. 一,概念 适配器模式,将一个类的结构转换成用户希望的另一个接口,使得原本接口不兼容的类能在一起工作.换句话说,适配器模式就是链接两种不 ...
- 解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题【转】
本文转载自:http://www.jb51.net/article/128398.htm 这篇文章主要介绍了Android 6.0获取wifi Mac地址为02:00:00:00:00:00的解决方法 ...