zoukankan      html  css  js  c++  java
  • 《Advanced Bash-scripting Guide》学习(六):从/etc/fstab中读行

    本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅

    ABS书上的例子:

    代码块和I/O重定向

    #!/bin/bash
    #从/etc/fstab中读行
    
    File=/etc/fstab
    
    {
    read line1
    read line2
    } < $File
    
    echo "First line in $File is:"
    echo "$line1"
    echo
    echo "Second line in $File is:"
    echo "$line2"
    
    exit 0
    #现在,你怎么分析每行的分割域
    #暗示:使用awk
    


    实践证明,当/etc/fstab文件最开始有空格或者注释的时候,打印出来的要么是空白,要么是一个#,ABS是这样提示的:Now, how do you parse the separate fields of each line?Hint: use awk, or . . .Hans-Joerg Diers suggests using the "set" Bash builtin。大意是:现在,你怎么分析每行之间的分隔域?提示:运用awk,或...Hans-Joerg Diers建议用set这个bash内建命令

    说实在的,我不明白为什么使用awk,因为awk是截取列的,现在要读取的是行,对于set,我也是知之甚少。鉴于这种情况,我将此脚本做了一定的改写,让这个脚本打印的是非空白和注释的行。也许以后,随着shell知识的不断增长,改进后的脚本势必会重新改写。也期待着那一天的到来。


    一个改进的脚本

    #!/bin/bash
    #从/etc/fstab中读取行
    
    printf "$(cat /etc/fstab | sed '/^$/d' | grep -v "^#")
    " > file
    File=/root/sh/file
    
    {
    read line1
    read line2 
    } < $File
    
    echo "First line in $File is:"
    echo "$line1"
    echo
    echo "Second line in $File is:"
    echo "$line2"
    echo
    
    exit 0
    


    注意我将/etc/fstab下非空白和注释的行重定向到file文件中,再从file文件中读取。

    去除空白行的几种方法

    1.grep命令

    grep -v "^$" 文件名

    2.sed命令

    cat 文件名 | sed '/^$/d'

    3.awk命令

    cat 文件名 | awk '{if($0!="")print}'

    cat 文件名 | awk '{if(length!=0)print $0}'


    脚本运行结果


  • 相关阅读:
    日志规范实践
    序列化和反序列化及Protobuf 基本使用
    简述TCP网络编程本质
    笔记:多线程服务器的适用场合(1)
    聊聊同步、异步、阻塞与非阻塞(转)
    《EntrePreneur》发刊词
    make和makefile简明基础
    luogu P3687 [ZJOI2017]仙人掌 |树形dp
    luogu P3172 [CQOI2015]选数 |容斥原理
    luogu P4513 小白逛公园 |线段树
  • 原文地址:https://www.cnblogs.com/my_captain/p/7147651.html
Copyright © 2011-2022 走看看