记录工作和生活点点滴滴

整理Linux学习笔记-第五天

bash的基础特性(3):

1. 提供了编程环境;

程序:指令+数据

    程序编程风格:
            过程式:以指令为中心,数据服务于指令;
            对象式:以数据为中心,指令服务于数据;

shell程序:提供了编程能力,解释执行

程序的执行方式:
    计算机:运行二进制指令;
    编程语言:
        低级:汇编
        高级:
            编译:高级语言-->编译器-->目标代码
                C,C++,java
            解释:高级语言-->解释器-->机器代码
                shell,perl,python

过程式编程:

    顺序执行;
    循环执行;
    选择执行;

        shell编程:过程式、解释执行
            编程语言的基本结构;
                数据存储:变量、数组
                表达式
                语句

shell脚本:文本文件

    shebang:
        #!/bin/bash
        #!/usr/bin/python
        #!/usr/bin/perl

    magic number:魔数

    运行脚本:
        1. 给予执行权限,通过具体的文件路径指定文件执行;
        2. 直接运行解释器,将脚本作为解释器程序的参数运行;

变量:

    命名的内存空间:

    数据存储方式;ASCII
        字符:110:24
        数值:110--> 8
            整型
            浮点型

            110*10=1100
                110110110110110110110110110110

    变量:变量类型
        作用:
            1. 数据存储格式;
            2. 参与的运算;
            3. 表示的数据范围;

        类型:
            字符;
            数值;
                整型
                浮点型

        编程程序语言:
            强类型:
            弱类型;shell
                把所有要存储的数据统统当做字符进行;
                不支持浮点数;

        逻辑运算;
            ture,false
            1,0

            与:
                1 && 1 = 1
                1 && 0 = 0
                0 && 1 = 0
                0 && 0 = 0
            或:
                1 || 1 = 1
                1 || 0 = 1
                0 || 1 = 1
                0 || 0 = 0
            非:
                ! 1 = 0
                ! 0 = 1
            异或:

        短路运算;
            与:
                第一个为0,结果必定为0;
                第一个为1,第二个必须要参与运算;

            或:
                第一个为1,结果必定为1;
                第一个为0,第二个必须要参与运算;

grep:

linux上文本处理三剑客:
    grep:文本过滤(模式:pattern)工具;
        grep,egrep,fgrep;
    sed:stream editor,文本编辑工具;
    awk:Linux上的实现gawk,文本报告生成器;

grep:Global search REgular expression and Print out the line.
    作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
        模式:由正则表达式字符及文本字符所编写的过滤条件;
        REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或统配功能;
        分两类:
            基本正则表达式:BRE
            扩展正则表达式:ERE
                grep -E,egrep

正则表达式引擎:

    grep [OPTIONS] PATTERN [FILE...]

        选项:
            --color=auto:表示对匹配到的文本着色显示;
            -v:显示不能够被pattern匹配到的行;
            -i:忽略字符大小写;
            -o:只显示匹配到的字符串;
            -q:静默模式,不输出任何信息;
            -A #:after,后#行;
            -B #:before,前#行;
            -C #:context,前后各#行;
            -E:使用ERE;

基本正则表达式元字符;

    字符匹配:
        .:  匹配任意单个字符;
        []: 匹配指定范围内的任意单个字符;
        [^]:匹配指定范围外的任意单个字符;
            [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
        匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;
            *:匹配前面的字符任意次;
            例如:grep "x*y"
                abxy
                xay
                xxxxxxy

            贪婪模式
                .*:任意长度的任意字符;
                \?:匹配其前面的字符0或1次;即前面的可有可无;
                \+:匹配其前面的字符至少1次;
                \{m\}:匹配前面的字符m次;
                \{m,n\}:匹配前面的字符至少m次,至多n次;
                    \{0,n\}:匹配前面的字符至多n次;
                    \{m,\}:匹配前面的字符至少m次;

    位置锚定:
        ^:行首锚定:用于模式的最左侧;
        $:行位锚定:用于模式的最右侧;
        ^PATTERN$:用于模式匹配整行;
            ^$:空行;
            ^[[:space:]]*$:

        \< 或\b:词首锚定:用于单词模式的左侧;
        \> 或\b:词尾锚定:用于单词模式的右侧;
        \<PATTERN\>:匹配整个单词;

    分组:
        \(\):将一个或多个字符捆绑在一起,当座一个整体进行处理;
            \(xy\)\+*ab

NOTE:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命令方式为:\1,\2,\3,...
                \1:从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
                \(ab\+(xy\)*\);
                \1:ab\+(xy\)*
                \2:xy

        后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身);

练习:

    1. 显示/proc/meminfo文件中以大小写S开头的行;(要求:使用两种方式)
    2. 显示/etc/passwd文件中不以/bin/bash结尾的行;
    3. 显示/etc/passwd文件中ID号最大的用户的用户名;
    4. 如果用户root存在,显示其默认的shell程序;
    5. 找出/etc/passwd中的两位或三位数;
    6. 显示/tmp/1文件中,至少以一个空白字符开头且后面存非空白字符的行;
    7. 找出“netstat -tan”命令的结果中以‘LISTEN’后跟0、1或多个空白字符结尾的行;
    8. 添加用户bash、testbash、basher以及nologin(其shell为/sbini/nologin):而后找出/etc/passwd文件中用户名同shell名的行;

答案:

    1. grep '^S' /proc/meminfo 
        grep "^[sS]" /proc/meminfo 
        grep -i "^s" /proc/meminfo  正确答案
    2. grep '[^/bin/bash$]' /etc/passwd
        grep -v "/bin/bash$" /etc/passwd 正确答案
    3. sort -t: -k3 -n /etc/passwd | tail -1 | cut -d: -f1
    4. grep 'root' /etc/passwd
    5. grep '[[:digit:]]\{2,3\}' /etc/passwd
        grep "\<[0-9]\{2,3\}\>" /etc/passwd 正确答案
    6. grep '[[:space:]]*[^[:space:]*$]' /tmp/1
        grep "^[[:space]]\+[^[:space:]]" /tmp/1 正确答案
    7. netstat -tan |grep 'LISTEN$*[[:space:]]*\{0,1\}'
        netstat -tan | grep "LISTEN[[:space:]]*$" 正确答案
    8.   useradd bash
        # useradd testbash
        # useradd basher
        # useradd -s /bin/nologin nologin
        # egrep "^([^:]+\>).*\1$" /etc/passwd    
        或者 # egrep "(\<..*\>).*\1$" /etc/passwd
未经允许不得转载:许春刚技术博客 » 整理Linux学习笔记-第五天

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址