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
$#:

      轮岗操作:shitf +[n]

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

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,则显示第一个参数所指向的文件中的空白行数;

Linux:Day6(上) egrep、条件测试的更多相关文章

  1. linux基础09-bash编程(条件测试和特殊变量)

    (1)整数测试 INT1=63 INT2=77 [ $INT1 -eq $INI2 ] [[ $INT1 -eq $INT2 ]] test $INT1 -eq $INT2 文件测试: -e FILE ...

  2. 第二十篇 Linux条件测试语句相关知识点介绍

      条件测试语句的格式如下: [ 条件表达式 ]        # 条件表达式两侧各有一个空格 按测试对象不同,条件测试语句共分为4中类型: 文件测试语句 逻辑测试语句 整数值比较语句 字符串比较语句 ...

  3. 【Linux】【Shell】【Basic】条件测试和变量

    bash脚本编程       脚本文件格式:         第一行,顶格:#!/bin/bash         注释信息:#         代码注释:         缩进,适度添加空白行:   ...

  4. Linux Shell 03 条件测试

    条件测试 方式一:在Bash中 test命令和[]是等价的. test命令: if test $n1 -eq $n2 then echo "The two number are equal& ...

  5. 在Linux系统上利用Tomcat搭建测试环境

    第一歩:查看Linux系统的IP地址. 输入命令:ifconfig 第二歩:WinSCP工具 1.下载WinSCP工具,便于文件直接从windows系统直接拖动到Linux系统中,图形化创建文件夹等. ...

  6. linux shell编程(二) 条件测试

    bash中常用的条件测试有三种 条件测试的表达式:[ expression ]  [[ expression]] 第一种:整数测试: -eq 测试两个整数是否相等,比如[ $A -eq $B ] -n ...

  7. linux条件测试操作(test)和if判断语句,while循环语句,break控制语句和for循环和case多分枝语句和select语句

    条件测试操作 条件测试是专为影响"$?"的操作,是条件转移.循环语句的基础   test测试命令: test 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0, ...

  8. Shell编程-条件测试 | 基础篇

    什么是Shell Shell是一个命令解释器,它会解释并执行命令行提示符下输入的命令.除此之外,Shell还有另一个功能,如果要执行多条命令,它可以将这组命令存放在一个文件中,然后可以像执行Linux ...

  9. Linux互斥锁、条件变量和信号量

    Linux互斥锁.条件变量和信号量  来自http://kongweile.iteye.com/blog/1155490 http://www.cnblogs.com/qingxia/archive/ ...

随机推荐

  1. vue+vuecli+webpack中使用mockjs模拟后端数据

    前言 使用mockjs可以事先模拟数据,前提是和后端约定好了数据接口,怎样的数据.使用mock就可以生成你要的数据了,从而实现开发时前后端分离. 其主要功能是: 基于数据模板生成模拟数据. 基于HTM ...

  2. GitHub for Windows离线安装包

    国内安装github客户端,真的很痛!! 偶然找到了离线安装包,感谢作者的资源分享!!! 地址:http://download.csdn.net/download/lyg468088/8723039? ...

  3. leetcode-58.最后一个单词的长度

    leetcode-58.最后一个单词的长度 题意 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但 ...

  4. 使用 float 存储小数?

    很多程序员就会使用 float 类型来存储小数.sql 的 float 类型和其他大多数编程语言的 float 类型一样, 根据IEEE 754 标准使用二进制格式编码实数数据. 但是很多程序员并不清 ...

  5. LeetCode题解之Squares of a Sorted Array

    1.题目描述 2.问题分析 使用过两个计数器. 3.代码 class Solution { public: vector<int> sortedSquares(vector<int& ...

  6. java笔记----java新建生成用户定义注释

    ${filecomment} ${package_declaration} /** * @author ${user} * @date 创建时间:${date} ${time} * @version ...

  7. @Autowired注解与@resource注解的区别(十分详细)

    背景: 今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配.于是本着学什么东西都要一钻 ...

  8. web前端(15)—— JavaScript的数据类型,语法规范2

    Object对象 说这个对象之前,如果您对编程语言开发稍微有点了解的话,应该知道面向对象是什么意思,而js也有面向对象一说,就因为如此,js才会这么强大. 什么是面向对象 其实所有支持面向对象的编程语 ...

  9. SQLServer基础之数据页类型:GAM,SGAM,PFS

    简介 我们已经知道SQL Server IO最小的单位是页,连续的8个页是一个区.SQL Server需要一种方式来知道其所管辖的数据库中的空间使用情况,这就是GAM页和SGAM页. GAM页 GAM ...

  10. Python语法的转义字符

    Python语法的转义字符 转义字符 说 明 \ 续行符 \n 换行符 \0 空  \t 水平制表符,用于横向跳到下一制表位 \'' 双引号 \' 单引号 \\ 一个反斜杠 \f 换页 \0dd 八进 ...