首页 > 请问这段Shell脚本的含义?

请问这段Shell脚本的含义?

今天接触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

请前辈指点下,谢谢!


简单的来说,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用到这里的地方对应的改过来就行了。


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

【热门文章】
【热门文章】