zoukankan      html  css  js  c++  java
  • linux操作系统基础篇(八)

    shell脚本的变量以及正则表达式

    一.变量

    含义:程序的运行就是一些列状态的变量->用变量值的变化去表示。

    命名规则

    以字母或下划线开头,剩下的部分可以是:字母、数字、下划线.

    最好遵循下述规范:

    1.以字母开头
    2.使用中划线或者下划线做单词的连接
    3.同类型的用数字区分
    4.对于文件最好加上拓展名
    例如: sql_bak.tar.gz,log_bak.tar.bz2 

    1. 系统变量

    set 和 env区别
    set:显示所有变量
    env:环境变量

    2. 变量赋值

    VARNAME=VALUE
    echo $VARNAME
    删除变量 unset VARNAME

    3. 常用系统变量 

    PATH
    PWD
    LANG
    HOME
    HISTSIZE
    PS1
    IFS
    域分隔符 是空格,换行,TAB键的合集

    4.全局变量与局部变量

    [root@MiWiFi-R3-srv ~]# gender='male' #在爹这个位置定义一个局部变量gender
    [root@MiWiFi-R3-srv ~]# export money=1000 #在爹这个位置定义一个全局变量money
    [root@MiWiFi-R3-srv ~]# 
    [root@MiWiFi-R3-srv ~]# 
    [root@MiWiFi-R3-srv ~]# bash #切换到子bash
    [root@MiWiFi-R3-srv ~]# echo $gender #在儿子这里看它爹的局部变量gender,结果为空->看不到

    [root@MiWiFi-R3-srv ~]# echo $money #在儿子这里看它爹的全局变量money,可以看到
    1000
    [root@MiWiFi-R3-srv ~]# 
    [root@MiWiFi-R3-srv ~]# export hobby='piao' #在儿子这里定义一个全局变量hobby
    [root@MiWiFi-R3-srv ~]# exit #退出,进入爹的bash环境
    exit
    [root@MiWiFi-R3-srv ~]# echo $hobby #爹是看不到儿子的export的,儿子的儿子可以看到

    [root@MiWiFi-R3-srv ~]#

    5. 定义变量名的边界

    [root@MiWiFi-R3-srv ~]# rest_mem=20
    [root@MiWiFi-R3-srv ~]# echo ${rest_mem}%
    20%

    6. 数据类型

    bash中的变量无须声明,拿来就用.默认的变量都会是字符类型,还可以有数字类型,普通的脚本,这两种类型够用了

    二.正则表达式结合grep来说明

    正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。

    grep加参数

    1.grep

    参数

    -n  :显示行号
    -o  :只显示匹配的内容
    -q  :静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

    -l  :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc 
    -A  :如果匹配成功,则将匹配行及其后n行一起打印出来
    -B  :如果匹配成功,则将匹配行及其前n行一起打印出来
    -C  :如果匹配成功,则将匹配行及其前后n行一起打印出来
    --color
    -c  :如果匹配成功,则将匹配到的行数打印出来
    -E  :等于egrep,扩展
    -i  :忽略大小写

    -v  :取反,不匹配
    -w:匹配单词

    2.grep种类
    grep
    fgrep
    pgrep
    egrep

    3.正则介绍

    ^ 行首
    $ 行尾
    . 除了换行符以外的任意单个字符
    * 前导字符的零个或多个
    .* 所有字符
    [] 字符组内的任一字符
    [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
    ^[^] 非字符组内的字符开头的行
    [a-z] 小写字母
    [A-Z] 大写字母
    [a-Z] 小写和大写字母
    [0-9] 数字
    < 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
    > 单词尾

    扩展正则 sed 加 -r 参数 或转义
    grep 加 -E 或 egrep 或转义
    AWK 直接支持 但不包含{n,m}
    可以使用--posix支持

  • 相关阅读:
    According to TLD or attribute directive in tag file, attribute end does not accept any expressions
    Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.
    sql注入漏洞
    Servlet—简单的管理系统
    ServletContext与网站计数器
    VS2010+ICE3.5运行官方demo报错----std::bad_alloc
    java 使用相对路径读取文件
    shell编程 if 注意事项
    Ubuntu12.04下eclipse提示框黑色背景色的修改方法
    解决Ubuntu环境变量错误导致无法正常登录
  • 原文地址:https://www.cnblogs.com/niubin/p/6939666.html
Copyright © 2011-2022 走看看