字符串的切割,expect交互,正则表达式【shell第三天】

网友投稿 335 2022-11-12

字符串的切割,expect交互,正则表达式【shell第三天】

字符串的处理

子串截取

1.${变量名:起始位置(从0开始):长度}

[root@server0 ~]# phone=18676749523[root@server0 ~]# echo $phone 18676749523[root@server0 ~]# echo ${phone:0:5} 18676[root@server0 ~]# echo ${phone:2:5} 67674查看位数[root@server0 ~]# echo ${#phone}11

2.expr substr $变量名 起始位置 长度

[root@server0 ~]# expr substr $phone 1 518676[root@server0 ~]# expr substr $phone 3 267

3.echo $变量名 | cut -b 起始位置-结束位置 杠号为2到4

[root@server0 ~]# echo $phone | cut -b 2-4867

逗号为取该位置

[root@server0 ~]# echo $phone | cut -b 2,5,8869

字符串的截取的实例:[利用随机数取其中一位数【脚本】]

例:#!/bin/bashi='abcdefghijklmnopqrstuvwxyz1234567890zxcvbnmasdfghjkl'n=$[RANDOM%53+1]echo $i | cut -b $n

n=$[RANDOM%53] 因从0开始,故不加1echo ${i:$n:1}

在变量i的后面继续取值

例:[root@server0 /]# i=1[root@server0 /]# p=$p$i[root@server0 /]# echo $p1[root@server0 /]# i=0[root@server0 /]# p=$p$i[root@server0 /]# echo $p10

替换 echo ${变量名/需替换的数字n/*} 替换第一个数字n为* echo ${变量名//需替换的数字n/*} 替换所有的n为*

例:[root@server0 /]# echo $phone 18676749525[root@server0 /]# echo ${phone/8/}1676749525[root@server0 /]# echo ${phone/5/}1867674925[root@server0 /]# echo ${phone//5/}186767492[root@server0 /]# echo ${phone//495/}186767*25[root@server0 /]# echo ${phone//495/}18676725

匹配删除 1. echo ${变量名#*:}从开头一直删除到第一个: echo ${变量名##*:}从开头删除到最后的:

例:[root@server0 /]# n=head -1 /etc/passwd[root@server0 /]# echo $nroot:x:0:0:root:/root:/bin/bash[root@server0 /]# echo ${n#:}x:0:0:root:/root:/bin/bash[root@server0 /]# echo ${n##:}/bin/bash

2. echo ${变量名%:*}从后开始删除到: echo ${变量名%%:*}从后开始删除所有到:

例:[root@server0 /]# echo ${n%:}root:x:0:0:root:/root[root@server0 /]# echo ${n%%:}root

利用匹配删除批量修改文件名:

#!/bin/bashfor i in ls *.jpg 【查看以jpg结尾的文件】do mv $i ./${i%.*}.doc 【更改为以doc结尾】done

判断变量并赋值

echo ${变量1:-变量2} 若存在变量1则显示,若无则显示变量2

例:[root@server0 /]# echo ${who:-dc}dc[root@server0 /]# who=000[root@server0 /]# echo ${who:-dc}000

利用判断是否输入,无输入则执行100

#!/bin/bashnum=0read -p "shu ru :" oo=${o:-100}for i in seq $odo let num+=idoneecho $num

EXPECT自动交互

模拟人物操作

发邮件(非交互)

mail -s 标题 root << EOF(结束)heheheheEOF

利用expect自动交互远程创建目录

#!/bin/bashexpect << EOFspawn ssh 192.168.4.10expect "password" {send "123456\n"}expect "#" {send "mkdir /xxx.x\n"}expect "#" {send "exit\n"}EOF

步骤1)安装expect软件2)编写配置文件

#!/bin/bashexpect << EOF1>spawn ssh 192.168.4.10 【命令行】2>expect "password" {send "123456\n"} 【命令行】 3>expect "#" {send "mkdir /xxx.x\n"} 【命令行】4>expect "#" {send "exit\n"} 【最后一行不执行】EOF

1>远程到ip192.168.4.10的机器上2>当看到"passsword"的字样时,输入1234563>当看到"#"时,创建目录4>不执行,防止设置最后的命令不执行

无法运行原因:1.有没有安装expect2.指定一个需要交互的程序3.有没有提示其他信息(未写在配置文件的判断上)4.expect最后一条命令不执行

ssh 远程无需确认ssh -o StrictHostKeyChecking=no

正则表达式

^ 开始$ 结尾[] 集合,取集合中的任意一个字符 :grep [a-z] a.txt 取a到z任意字母[^] 对集合取反 :[^abc]除了abc的其他 . 任意单个字符

前一个字符出现了任意次 【不允许单独使用】. 任意所有==(){n,m} 前一个字符出现了n次到m次{n,} 前一个字符出现了n次及以上{n} 前一个字符出现了n次 扩展正则表达式 最少匹配一次? 最多匹配一次{n,m} 匹配n到m次() 组合为整体,保留| 或者\b 单词边界 查找包含init单词的行egrep '\binit\b' /etc/rc.local

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:英创信息技术JDA901 6网口单板工控机简介
下一篇:log4j2.xml文件详解及在日志中加入全局guid
相关文章

 发表评论

暂时没有评论,来抢沙发吧~