• Linux:Day6(上) egrep、条件测试


    egrep及扩展的正则表达式:

      egrep = grep -E

      扩展正则表达式的元字符:

        或者:a | b

    练习:

      1、显示当前系统root、centos或user1用户的默认shell和UID;     

      2、找出/et/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;

      3、使用echo输出一个路径,使用egrep取出基名;(整个路径的最后一个名称)

      4、找出ifconfig命令结果中1-255之间的数值;

      5、找出ifconfig命令结果中的IP地址;

      注意:在使用或的时候会有很多坑,一定要小心,拿这题举例:

        【1】匹配1-255之间的数字。

          错:<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2}>  # 由于或的存在,锚定词首只对第一个有效,锚定词尾只对最后一个选择有效。

          对:<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})>  # 在一个符号多次出现的时候,没必要一个一个加,只要在外面加括号就可以了。

        【2】匹配1-255数字加一个点。

          (<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2}).){3}

        【3】匹配IP地址

          错:(<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2}).){3}<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2}  # 由于后面或没加括号,这样就连带前面所有一起或了。

          对:(<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2}).){3}<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})

    fgrep:不支持正则表达式搜索;

     bash的基础特性(4)

      变量类型:

        数据存储格式 、存储空间大小、参与运算各类;

        字符型

        数值型 :

          整型

          浮点型

        强类型:定义变量时必须指定类型、参与运算必须符合类型要求

        弱类型:无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;

      bash中的变量的种类:

        根据变量的生效范围等标准:

          本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效;

          环境变量:生效范围为当前shell进程及其子进程;

          局部变量:生效范围为当前shell进程中某代码片断(通常指函数);

          位置变量:$1, $2, ...来表示,用于让脚本在脚本代码 中调用通过命令行传递给它的参数;

          特殊变量:$?, $0, $*, $@, $#

        本地变量:

          变量赋值:name="value"

            可以使用引用:

              value:

                (1) 可以是直接字串:name="username"  注:变量赋值的=号前号不能有空格,不然shell会把变量名当命令执行,然后报command not found这个错误,这个和Python不太一样。另外VALUE值中如果没空格,引号也可以不用加。

                 (2) 变量引用:name="$username"

                (3) 命令引用:name=`COMMAND`,name=$(COMMAND)   就是将一个命令的执行结果赋值给一个变量,推荐第2种方法。

          

          变量引用:${name}, $name

            " ":弱引用,其中的变量引用会被替换为变量值;

            ‘ ’:强引用,其中的变量引用不会被替换为变量值,而保持原来字符串;

          显示已定义的所有变量

            set

          销毁变量:

          unset name  注:变量名前不用加$

      环境变量:

        变量声明、赋值;

          export name=VALUE

          declare -x name=VALUE

          示例:(1) 直接定义一个环境变量:

              declare -x num1=3

             (2) 将 一个本地变量导出为环境变量:

              num2=5

              declare -x num2

        变量引用:$name,$(name)

        显示所有环境变量:

          export

          env

          printenv

        销毁:

          unset name

        bash有许多内建的环境变量:PATH,SHELL,UID,HISISIZE,HOME,PWD,OLD,HISFILE,PS1

      

      变量命令法则:

        1、不能使用程序中的保留字;

        2、只能使用数字、字母及下划线,且不能以数字开头;

        3、见名识义;

      

      只读变量:不能变改值,不能被销毁,只能等到shell进程终止时随之销亡。

        readonly name

        declare -r name

      位置变量:

        在脚本代码中调用通过命令行传递给脚本的参数;

          $1,$2,....;对应调用第1、第2个参数

          $0:命令本身;

          $*:传递给脚本的所有参数;调用时将传递给脚本的所有参数当一个字符串;

          $@:传递给脚本的所有参数;将传递给脚本的每一个参数当一个独立的字符串;

          $#:传递给脚本的参数的个数;

          示例:

    [root@localhost bin]# ./posvar.sh tom jerry obama
    ./posvar.sh
    jerry
    $*:tom jerry obama
    $@:tom jerry obama
    $#:3

          轮岗操作:shitf +[n]

    [root@localhost bin]# nano posvar.sh
    #!/bin/bash
    echo $1
    shift    注:踢掉一个。
    echo $1
    shift 2    注:踢掉两个
    echo $1
    echo "$*:$*"
    echo "$@:$@"
    echo "$#:$#"
    ----------------------------------------------------------------
    [root@localhost bin]# ./posvar.sh tom jerry obama blair
    tom
    jerry
    blair
    $*:blair
    $@:blair
    $#:1

    bash的配置文件:

      按生效范围划分,存在两类:

        全局配置:

          /etc/profile

            /etc/profile.d/*.sh

          /etc/bashrc

        个人配置:

          ~/.bash_profile

          ~/.bashrc

      按功能划分,存在两类:

        profile类:为交互式登录的shell提供配置;

          全局:/etc/profile,/etc/profile.d/*.sh

          个人:~/.bash_profile

          功用:

            (1)用于定义环境变量;

            (2)运行命令或脚本;

        bashrc类:为非交互式登录的shell提供配置;

          全局:/etc/bashrc

          个人:~/.bashrc

          功用:

            (1)定义命令别名;

            (2)定义本地变量;

      shell登录:

        交互式登录:

          直接通过终端输入账号密码登录;

          使用:su -UserName 或su -l UserName 切换的用户

          /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

        非交互式登录:

          su UserName

          图形界面下打开的终端

          执行脚本

          ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

      编辑配置文件定义的新配置的生效方式:

        (1)重新启动shell进程;

        (2) 使用source或.命令进程;

      问题:

        1、定义对所有用户都生效的别名?

        2、让用户的PATH环境变量的值多出一个路径,例如多加/usr/local/apache2/bin

    bash中的算术运算:

      +,-,*,/,%,**

       实现算术运算:

        (1)let var=算术表达式

        (2)var=$[算术表达式]

        (3)var=$((算术表达式))

        (4)var=$(expr arg1 arg2 arg3 ....)  例如:mul2=$(expr $num1 * $num2)

        乘法符号有些场景中需要转义;

        bash有内建的随机数生成器:$RANDOM  例如:echo $[$RANDOM%60+1]

      增强型赋值:

        +=,-=,*=,/=,%=

        let varOPERvalue

          例如:let count+=1

      自增,自减:

        let var+=1

          let var++

        let var-=1

          let var--

      练习1:写一个脚本

        计算/etc/passwd文件中的第10个用户和第20用户之ID之和;

      练习2:写一个脚本

        传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和;

    条件测试:

      判断某需求是否满足,需要由测试机制来实现;

      Note:专用的测试表达式需要由测试命令辅助完成测试过程;

      测试命令:

        test EXPRESSION

        [ EXPRESSION ]

        [[ EXPRESSION ]]

        Note:EXPRESS前后必须有空白字符,写的时候容易忘记,提示命令不存在

      bash的测试类型:

        数值测试:

          -gt:不否大于;

          -ge:是否大于等于;

          -eq:是否等于;

        字符串测试:

          ==:是否等于;

          >:是否大于;

          <:是否小于;

          !=:是否不等于;

          ~=:左侧字符串是否能够被右侧的PATTERN所匹配;

            Note:此表达式一般用于[[   ]]中;

          -z "STRING”:测试字符串是否为空,空则为真,不空则为假;

          -n "STRING":测试字符是否不空,不空则为真,空则为假;

          Note:用于字符串比较时用到的操作数都应该使用引号;

        文件测试

    bash自定义退出状态码

      exit [n]:自定义退出状态码;

        注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字;

      注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码;

      练习:写一个脚本

        接受一个文件路径作为参数;

          如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;

          如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数;

  • 相关阅读:
    DBA常用脚本 二、性能监控
    ORA01012:not logged on的解决办法
    线性布局LinearLayout
    Android Handler.postDelayed()方法
    java String.valueOf()
    布局管理器ViewGroup
    UE3的数据绑定笔记
    概念、实现和沟通
    DirectX11的Shader Reflect的几个问题(2012222更新)
    测试livewriter
  • 原文地址:https://www.cnblogs.com/sq5288/p/9637516.html
Copyright © 2020-2023  润新知