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

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

时间: 2024-10-12 17:10:36

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

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

shell脚本中特定符合变量的含义: $#   传递到脚本的参数个数 $*    以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$    脚本运行的当前进程PID号 $!     后台运行的最后一个进程的进程号 [email protected]   与$*相同,但是使用时用双引号,并将各个参数加双引号返回 $-     显示shell使用的当前选项,与set命令功能相同 $_    上一个命令的最后一个参数 $?     显示最后命令的退出状态,0表示执行成功

记录shell脚本中的特殊变量

1.特殊的位置变量 关于上面的相关变量介绍,也可以参考man手册,执行命令"man bash",然后搜索关键字"Special Parameters"即可看到相关变量的解释. 2.bash shell内置的变量命令 bash Shell包含一些内置命令.这些内置命令在目录列表里是看不见的,它们由Shell本身提供.常用的内部命令有:echo.eval.exec.export.read.shift. (1)echo--在屏幕上输出信息常用参数如下: (2)export

shell脚本中局部变量local

shell脚本中局部变量 在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止. 例1:脚本变量的作用域 #!/bin/bash #define the function ltx_func ltx_func() {    echo $v1    #modify the variable v1   

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

让echo输出带颜色的方法有两种 在shell脚本中定义颜色变量,使用echo -e调用变量 定义变量的时候,把echo -e定义到变量中,然后输出变量 可以让echo输出显示颜色的shell脚本 #!/bin/bash #定义颜色的变量 RED_COLOR='\E[1;31m'  #红 GREEN_COLOR='\E[1;32m' #绿 YELOW_COLOR='\E[1;33m' #黄 BLUE_COLOR='\E[1;34m'  #蓝 PINK='\E[1;35m'      #粉红 RE

shell脚本中局部变量

在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题. (1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止. 例1:脚本变量的作用域 #!/bin/bash #define the function ltx_func ltx_func() {    echo $v1    #modify the variable v1    v1=200 } #def

shell脚本中的dat,计算器,内置变量的用法

什么是shell脚本.首先它是一个脚本,并不能作为正式的编程语言.因为是跑在linux的shell中,所以叫shell脚本.说白了,shell脚本就是一些命令的集合.举个例子,我想实现这样的操作: 1)进入到/tmp/目录: 2)列出当前目录中所有的文件名: 3)把所有当前的文件拷贝到/root/目录下: 4)删除当前目录下所有的文件. 简单的4步在shell窗口中需要你敲4次命令,按4次回车.这样是不是很麻烦?所以不妨把所有的操作都记录到一个文档中,然后去调用文档中的命令,这样一步操作就可以完

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

一.shell脚本介绍shell脚本要想写好,必须通过不断地去练习写才能写好,没有捷径要在我们拿到一个需求的时候有一个脚本的大致思路,想到需求怎么去实现shell脚本可以大大提高我们的工作效率二.shell脚本结构和执行[[email protected] ~]# mkdir shell //创建一个shell文件夹,存放实验的shell脚本[[email protected] ~]# cd shell/[[email protected] shell]# ls[[email protected

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

学习Shell脚本编程(第4期)_在Shell程序中的使用变量

变量的赋值 变量的访问 变量的输入 4.1 变量的赋值     在Shell编程中,所有的变量名都由字符串组成,并且不需要对变量进行声明.要赋值给一个变量,其格式如下: 变量名=值  注意: 等号(=)前后没有空格 例如: x=6 a="How are you " 表示把6赋值给变量x,字符串"How are you "赋值给变量a. 4.2 访问变量值 如果要访问变量值,可以在变量前面加一个美元符号"$",例如: [[email protect