美文网首页
高级shell编程指南学习笔记(二)——由read命令引出的

高级shell编程指南学习笔记(二)——由read命令引出的

作者: 耗子在简书 | 来源:发表于2017-11-14 00:16 被阅读0次

今天遇到有人要写一个从log里滚动读取最新条目并且根据是否有前置空格输出到终端的脚本,问我怎么判断每行的前置空格,我先给了他一个思路:

if [[ $(echo $line | cut -b 1) -eq " " ]];then 
: 
else
:
fi

过了一会,他说试过了,怎么改都不行,于是我让他把脚本全部贴出来(这里我略做了改动):

#!/bin/bash
#space.sh
service_log=1.txt
tail -f  $service_log|while read line;do
if [[ $(echo $line|cut -c 1) -eq " " ]]
  then
        echo $line
fi
done

乍一看是没什么问题的,我试着运行了一下,做了一个1.txt:

#1.txt
1111111
  22222
   3333

输出的结果是这样的:

[root@test ~]# bash space.sh 
■

“■”处是光标

奇怪了,为什么明明有空格却不输出第二第三行呢。。。

if判断的逻辑肯定是没问题的,那么问题大概就出在read的过程了,于是百度了一下,果然,shell脚本中默认的IFS(内部域分隔符)是空白,所以read到的line中的空白都被替换掉,这是bash中对IFS为空白(空格,制表符,换行符)时的处理。

教材中对

$IFS

的说明可以归纳如下:

我要吐槽简书的md不支持流程图

于是在space.sh里面加了一条语句:

IFS=#
#任意非空的字符,确保不会出现在1.txt中

完整的脚本:

#!/bin/bash
#space.sh
service_log=1.txt
IFS=#
tail -f  $service_log|while read line;do
if [[ $(echo $line|cut -c 1) -eq " " ]]
  then
        echo $line
fi
done

运行结果如下:

[root@test ~]# bash space.sh 
  22222
   3333
■

效果不错。

相关文章

  • 高级shell编程指南学习笔记(二)——由read命令引出的

    今天遇到有人要写一个从log里滚动读取最新条目并且根据是否有前置空格输出到终端的脚本,问我怎么判断每行的前置空格,...

  • linux/shell 分析nginx日志

    一、学习资料 高级Bash脚本编程指南 LINUX与UNIX SHELL编程指南 鸟哥的Linux私房菜 IBM ...

  • BigData~01:Shell

    Shell编程基础 内容大纲 一、Shell编程二、高级文本处理命令:sed、awk、cut三、crontab定时...

  • 高级shell编程指南学习笔记(一)

    清空一个文件: 和 是等价的。 $@与$*:都代表参数列表。 举个栗子: 在终端里运行 那么第一段循环的输出是: ...

  • shell 基础应用

    本笔记是《Ubuntu Linux 从初学到精通》的第10章内容。 shell是命令解释器同时也是一种高级编程语言...

  • Shell脚本

    shell脚本学习笔记 shell命令的组合运用 常用命令组合

  • Shell十三问 学习笔记

    文本处理 Shell脚本编程 Shell 十三问 学习笔记 shell and Carriage 关系 Shell...

  • shell基本输入

    shell基本输入read命令read命令默认接受键盘的输入,回车符代表输入结束 read 命令选项 -p打印信息...

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

  • 2019-01-25

    Linux系统Shell编程指南 前言 适合人群:有类似C编程基础的人 一、Shell编程介绍 Shell解释型语...

网友评论

      本文标题:高级shell编程指南学习笔记(二)——由read命令引出的

      本文链接:https://www.haomeiwen.com/subject/mfatvxtx.html