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脚 ...
随机推荐
- SQL 连接(JOIN)
SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来. SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JO ...
- Nginx在Linux下的安装部署
Nginx简单介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 server,也是一个 IMAP/POP3/SMTP server.Nginx作为 ...
- unique函数(STL)
unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数,所以头文件 ...
- 使用Blender批量导出/转换模型
2.4版本号的Blender API和2.5以上版本号的API有非常大的不同,这里仅仅是提供了思路和2.4版本号的导出方案. 先提供一个脚本,这个是由Blender调用的.用于转换Ogre的Mesh文 ...
- UVa 401 Palindromes(镜像回文字符串)
题意 给一个字符串 判定其是否为回文串和镜像串 回文串非常好推断 镜像串对于每个字符用数组保存它的镜像字符即可了 没有的就是空格 注意若字符串长度为奇数 中间那个字母必须是对称的才是镜 ...
- 在类的头文件里尽量少引入其它头文件 <<Effective Objective-C>>
与C 和C++ 一样,Objective-C 也使用"头文件"(header file) 与"实现文件"(implementation file)来区隔代码.用 ...
- Matplotlib绘图基础
import matplotlib.pyplot as plt import numpy as np #绘图流程 x=np.linspace(-1,1,100) y=x**2 plt.plot(x,y ...
- PHP出现Warning: A non-numeric value encountered问题的原因及解决方法
本文介绍php出现Warning: A non-numeric value encountered问题,用实例分析出现这种错误的原因,并提供避免及解决问题的方法. <?php error_rep ...
- mysql 5.5安装不对容易出现问题
按照正常步骤安装完了mysql 5.5之后,再运行一下bin目录中的mysqlinstanceconfig.exe,重置一下密码!!!! 重置密码的地方:modify security setting ...
- HDU1754 —— I Hate It 线段树 单点修改及区间最大值
题目链接:https://vjudge.net/problem/HDU-1754 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜 ...