zoukankan      html  css  js  c++  java
  • Day3-字符串-数组-正则表达式

    字符串截取

    1、${变量名:N:M}

    N    起始值——从0开始——0为第1个字母

    M    结束值

    [root@localhost ~]# echo $name

    thisistest

    [root@localhost ~]# echo ${name:0:4}

    this

    [root@localhost ~]# echo ${name:6:10}

    test

    2、expr ——可以做比较、运算、字符串

    Expr substr    "$变量名"    N     M

    注:该起始值从1    开始,不是0

    测试字符串长度

    Expr length    "$变量名"

    [root@localhost ~]# echo $name

    thisistest

    [root@localhost ~]# expr substr "$name" 1 4

    this

    [root@localhost ~]# expr substr "$name" 5 2

    is

    3、cut

    格式:命令    |    cut    -b    N-M

    注:该起始值从1    开始,不是0

    [root@localhost ~]# echo $name

    thisistest

    [root@localhost ~]# echo $name |cut -b 1-4

    this

    [root@localhost ~]# echo $name |cut -b 7-

    test

    [root@localhost ~]# echo $name |cut -b 5-6

    is

    简单使用awk——-F为列——:为冒号分格——$1为第1列

    [root@localhost ~]# head -4 /etc/passwd|awk -F ":" '{print $1}'

    root

    bin

    daemon

    adm

    [root@localhost ~]# ifconfig |head -2|tail -1|awk '{print $2}'|awk -F ":" '{print $2}'

    192.168.100.100

    [root@localhost ~]# df -h|head -2|tail -1|awk -F " " '{print $4}'

    14G

    ${变量名    符号    表达式}

    返回结果:删除与表达式匹配的数据后,剩下的数据是返回值

    表达式的表示方式——普通字符——通配符        *

    符号

    从左向右匹配删除

    #    最短匹配删除

    ##    最长匹配删除

    [root@localhost ~]# echo ${MAIL#*/}

    var/spool/mail/root

    [root@localhost ~]# echo ${MAIL##*/}

    root

    从右向左匹配删除

    %    最短匹配删除

    %%    最长匹配删除

    [root@localhost ~]# echo ${MAIL%/*}

    /var/spool/mail

    [root@localhost ~]# echo ${MAIL%%/*}

    [root@localhost ~]# echo ${MAIL%%root}

    /var/spool/mail/

    ————————————————————————————————————————————————————————

    例——对当前目录下的文件修改

     1 #!/bin/bash
     2 
     3 i=1
     4 
     5 for file in `ls *.txt`
     6 
     7 do
     8 
     9 # echo $file
    10 
    11 # a=`echo ${file%.txt}`
    12 
    13 # b=`echo "$a-$i".txt`
    14 
    15 # mv $file $b
    16 
    17 mv $file `echo ${file%.txt}-$i.txt`
    18 
    19 let i++
    20 
    21 done
    22 
    23 echo "this is mv file ok..."

    例——对httpd根目录下的新产生的*.html备份

     1 #!/bin/bash
     2 a=/bk
     3 cd /bk &> /dev/null || mkdir /bk &> /dev/null
     4 cd /var/www/html
     5 for file in `ls *.html`
     6 do
     7         if [ ! -e $a/$file ];then
     8          cp $file $a
     9         fi
    10 done
    11 echo "This is Bk Ok"

    ${变量名  符号  "值"}

    echo  ${变量名  符号  "自定义字串"}——输出命令返回值

    变量A=${变量名B  符号  "值"}——把命令的返回值赋值给变量

    符号

    :+  作检查变量是否定义——若变量没有定义,返回为空值。反之则返回自定义字串

        ——变量B有值时,被“值”所取代——若没有定义变量B,则返回为空

        检测变量是否为空——[ -z $a ] && echo "null"

    :-  给变量赋初值——变量没定义时,返回自定义字串,反之返回变量的值

    :=  作用给变量赋初值——若变量没定义时,返回自定义字串,同时把自定义字串赋值给没值的变量

    :?  作用捕获因变量没定义所导致的错误——在脚本里使用时,返回错误信息并终止脚本的执行,若自定义字串没定义,返回系统默认设置信息。若变量有值则返回变量的值

    shell数组

    数组——存放一组数据,一个变量存储多个值,并且每个值都可以独立使用

    数组类型——1维数组  2维数组  多维数组

    [root@localhost shell]# declare --help
    -bash: declare: --: invalid option
    declare: usage: declare [-aAfFilrtux] [-p] [name[=value] ...]

    定义  [root@localhost shell]# declare -a shuzu

    赋值  [root@localhost shell]# shuzu=(a b c d)

    使用数组元素 ${数组名[下标]} 

    查看  

    [root@localhost shell]# declare |grep shuzu
    shuzu=([0]="a" [1]="b" [2]="c" [3]="d")

    [root@localhost shell]# echo ${shuzu[2]}
    c

    输出数组所有元素 

    [root@localhost shell]# echo ${shuzu[@]}
    a b c d
    [root@localhost shell]# echo ${shuzu[*]}
    a b c d

    #echo ${shuzu[@]:N}——N从数组的那一个下标开始显示元素值 默认下标值为0

    下标为2开始显示

    [root@localhost shell]# echo ${shuzu[@]:2}
    c d

    下标为1到2

    [root@localhost shell]# echo ${shuzu[@]:1:2}
    b c

    获取数组元素个数  ${#数组名[@]}

    获取某个数组元素值的长度  ${#数组名[数组下标]}

    输出某个数组元素值的部分数据

    echo ${sergrp[下标]:N:M}

        N——元素值的编号  第一个字符编号是0

        M——显示字符的个数

    向已有数组里添加新元素

    数组名[下标]=值

      下标没有被已有元素使用,就是向数组添加新元素

      若下标已经被已有元素使用,说法是修改已有下标元素的值

    删除数组元素下标的值——数组名[下标]=

    删除数组元素下标——unset 数组名[下标]

    删除数组元素所有数据——数组名=()

    删除定义的数组名——unset 数组名

    例——用户输入多个ip保存到变量ipgroup里,并根据输入ip地址的个数,输出用户所输入的所有ip地址

     1 #!/bin/bash
     2 read -p "this is ? ip:  " a
     3 a=${a:-1}
     4 b=1
     5 for ((i=1;i<=$a;i++))
     6 do
     7         read -p "$b ip:  " ipgroup[$i]
     8         let b++
     9 done
    10 for ((i=1;i<=`echo ${#ipgroup[@]}`;i++))
    11 do
    12         echo ${ipgroup[$i]}
    13 done

    正则表达式—— Regular  Express

    使用  符号  描述  数据的特征

        符号——1个或多个——元字符

    命令格式

    grep  [选项]  ‘正则表达式’

    命令  |  grep  [选项]  ‘正则表达式’

    grep  ‘root’  /etc/passwd  /etc/shadow

    ps  aux  |  grep  httpd

    处理数据的方式

    以行为处理单位,一次处理一行,逐行处理

    默认输出与正则表达式匹配的行

    选项

    --color  匹配条件加上颜色显示

    -n  匹配行号

    -c  匹配行数

    -q  去掉匹配输出

    -v  取反

    -i  忽略字母大小写——默认是有大小写

    元字符

    匹配开头  ^  行首

    匹配结尾  $  行尾

    任意单个字符  .  不包括换行符   ——如何需要找  .  字符需要转义  .

      普通符号要转义

      ^$为空 行

    *  匹配前边正则表达式出现的次数——0次到多次

    (正则表达式)  把正则表达式作为整体匹配

    grep --color ‘g(oo)*d’  a.txt  goo——d

    |  或者

    []  范围内匹配——匹配范围内的任意一个

    [a-z]  匹配所有小写字母

    [A-Z]  匹配所有大写字母

    [a-zA-Z]  [a-Z]  匹配所有大小写字母

    [0-9]  匹配所有数字

    [a-zA-Z0-9]  匹配所有数字和大小写字母

    [^0-9a-Z]  范围取反

      ^[  ]以范围内开头

      ^[^  ]范围内取反的开头

    {  }现在前边的表达式出现的次数

    {N}前边的正则表达式必须出现N次

      {g(oo){2}d}   以g开头oo出现两次的d——g  oo  oo  d

    {N,}前边的正则表达式至少出现N次

    {N,M}前边的正则表达式至少出现N次,最好多出现M次——次数>=N并且<=M

    ?  匹配前边的正则表达式出现0次到1次

    +  匹配前边的正则表达式出现1次到多次

    <  匹配单词开头

    >  匹配单词结尾

    正确的MAC地址显示出来

    六列,每列由任意2个十六进制数组成

    [root@localhost shell]# ifconfig eth0|grep --color -E '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}'

    使用expect

  • 相关阅读:
    双连通分量
    题解 骰子
    2020 最新 Kubernetes实战指南:从零到架构师的进阶之路
    kubernetes实战(二十八):Kubernetes一键式资源管理平台Ratel安装及使用
    新书推荐《再也不踩坑的Kubernetes实战指南》
    为什么要用Kubernetes?
    Kubernetes实战指南(三十一):零宕机无缝迁移Spring Cloud至k8s
    kubernetes实战(三十一):Prometheus监控Windows主机
    kubernetes实战(三十):CentOS 8 二进制 高可用 安装 k8s 1.17.x
    kubernetes实战(二十九):Kubernetes RBAC实现不同用户在不同Namespace的不同权限
  • 原文地址:https://www.cnblogs.com/fina/p/5816201.html
Copyright © 2011-2022 走看看