字符串的处理
子串截取
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 5
18676
[root@server0 ~]# expr substr $phone 3 2
67
----------------------------------------------------------------------------------------------------------------
3.echo $变量名 | cut -b 起始位置-结束位置
杠号为2到4
[root@server0 ~]# echo $phone | cut -b 2-4
867
逗号为取该位置
[root@server0 ~]# echo $phone | cut -b 2,5,8
869
-------------------------------------------------------------------------------------------------------------------
字符串的截取的实例:
[利用随机数取其中一位数【脚本】]
例:
#!/bin/bash
i='abcdefghijklmnopqrstuvwxyz1234567890zxcvbnmasdfghjkl'
n=$[RANDOM%53+1]
echo $i | cut -b $n
n=$[RANDOM%53] 因从0开始,故不加1
echo ${i:$n:1}
-----------------------------------------------------------------------------------------------------------------
在变量i的后面继续取值
例:
[root@server0 /]# i=1
[root@server0 /]# p=$p$i
[root@server0 /]# echo $p
1
[root@server0 /]# i=0
[root@server0 /]# p=$p$i
[root@server0 /]# echo $p
10
------------------------------------------------------------------------------------------------------------------------
替换
echo ${变量名/需替换的数字n/*} 替换第一个数字n为*
echo ${变量名//需替换的数字n/*} 替换所有的n为*
例:
[root@server0 /]# echo $phone
18676749525
[root@server0 /]# echo ${phone/8/*}
1*676749525
[root@server0 /]# echo ${phone/5/*}
18676749*25
[root@server0 /]# echo ${phone//5/*}
18676749*2*
[root@server0 /]# echo ${phone//495/*}
186767*25
[root@server0 /]# echo ${phone//495/***}
186767***25
--------------------------------------------------------------------------------------------------------------------
匹配删除
1.
echo ${变量名#*:}从开头一直删除到第一个:
echo ${变量名##*:}从开头删除到最后的:
例:
[root@server0 /]# n=`head -1 /etc/passwd`
[root@server0 /]# echo $n
root: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/bash
for 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/bash
num=0
read -p "shu ru :" o
o=${o:-100}
for i in `seq $o`
do
let num+=i
done
echo $num
- - - - - - - - - - - - - - - - - - - - - -- - - - - -- - ------------------------------------------------
EXPECT自动交互
模拟人物操作
发邮件(非交互)
mail -s 标题 root << EOF(结束)
hehe
hehe
EOF
利用expect自动交互远程创建目录
#!/bin/bash
expect << EOF
spawn ssh 192.168.4.10
expect "password" {send "123456\n"}
expect "#" {send "mkdir /xxx.x\n"}
expect "#" {send "exit\n"}
EOF
步骤
1)安装expect软件
2)编写配置文件
#!/bin/bash
expect << EOF
1>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"的字样时,输入123456
3>当看到"#"时,创建目录
4>不执行,防止设置最后的命令不执行
无法运行原因:
1.有没有安装expect
2.指定一个需要交互的程序
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
'
\b
init
\b
'
/etc/
rc
.
local