搜索
linux - 请问这段Shell脚本的含义?
天蓬老师
天蓬老师 2017-04-17 13:02:51
[Linux讨论组]

今天接触inotify时在网上看到一段脚本,如下:

inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f'
-e create,delete,modify,attrib  $SRCDIR | while read DATE TIME DIR FILE; do
   $FILECHANGE=${DIR}${FILE}
   rsync -avze 'ssh' $SRCDIR root@${DESTHOST}:${DESTHOSTDIR} &>/dev/null && \
      echo "At ${TIME} on ${DATE}, file $FILECHANGE was backed up via rsync" >> /var/log/filesync.log

done

其中的 管道后面的 read DATE TIME DIR FILE 是什么意思?而且在下文中又可以通过 变量的形式获得到 ${DATE},另外一个例子差不多,如下:

   xxx | while read D E F

请前辈指点下,谢谢!

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
迷茫

简单的来说,inotifywait检测文件变动,输出结果是类似,
25/3/2015 15:20 /home/user example.txt

每行执行一次竖线|(也叫管道)后面的read,
read的作用是read后面的变量分别匹配这四个结果,按空格分隔,
然后四个值或者说四个字符串分别存入read后面的四个参数作为变量循环下去。
就是说,下文里面的${DATE}就是2015三月二十五,$TIME就是15:20,$DIR就是。。然后。。就是。。
${DATE}也可以写成$DATE。
至于写成D E F也可以,只不过是个变量名,写成这样比较容易理解,只要个数相同就可以,下文也改了也是可以,例如这里read D E F G,D就是日期,E是时间,F是目录,G是文件名,下文里面rsync用到这里的地方对应的改过来就行了。

PHP中文网

read DATE TIME DIR FILE
通过用户键盘将输入的内容赋值给 日期 时间 目录 文件 这些变量,输入格式就是4个变量中间用空格隔开

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号