创建一个以.sh结束的文件.
规则:
文件的头部使用#!/bin/sh 开头 这个是一个标识的作用,告诉使用哪种脚本来执行
echo 用来向命令行来输出的东西
在这之前,我们先看shell 环境变量的问题。
set 设置当前shell 进程的本地变量
env 仅为将要执行的子进程进行设置
export 将一个shell本地环境变量,变为 当前shell的环境变量,从而被子进程自动继承,但是不能改变父级的环境变量
source 运行脚本的时候,不会启动一个新的shell进程,而是在当前shell 环境中运行脚本,意思就是按照脚本的顺序进行执行
exec 不会启动一个新的进程,exec 之后的脚本也不会执行,也就是说,之后,程序就结束了。
重定向
> 重定向到文件,会进行覆盖
>! 重定向到文件,强制覆盖
>> 定向到文件,进行追加
2> 将一个标准错误,重定向到一个文件
2>> 将一个标准错误,追加到一个我呢见
2>&1 将一个标准错误重新定向到标准输出
|& 将一个标准错误 管道 输送 到另一个命令作为输入
&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中
! 序号 执行历史命令序号对应的命令
字符串截取
${name:0:2} 截取字符串, 从第几位开始,截取多长
basename 去除路径,如 a/b/c/test.txt 输出为test.txt
dirname 剩余路径
$0 代表文件本身 带着路径
字符串替换
${name/3/4} 替换第一个3,为4
${name//3/4} 替换所有的3 为4
字符串去头去尾
去头 第一个匹配# 最后一个匹配## 如 ${name#:} 不包括冒号
去尾% 如 ${name%:*}
expect 自动交互工具 expect 等待是有限制的,所以有时候,需要设置超时时间
它的核心是 spawn expect send set
其中 spawn 调用要执行的命令
expect 等待命令提示
send 发送需要的值
set 设置环境变量
expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了
例子:
#!/binbash
意思就是 执行命令,期待出现什么,发送什么东西
expect <<EOF
set timeout 10
spawm ssh 192.168
expect "password" {send "exit "}
EOF
正则表达式
[ ] 代表集合,表中其中的任意单个字符 连续的东西,可以使用 - 进行连接
[0-9]
[a-z]
^ 开始
[^ ] 对集合取反
$ 结尾
. 代表任意单个字符
.* 任意字符
a* 代表a ,同一个字符出现任意次数
a{n,m} a 出现 n 到m 出现的次数
?子表达式 0 次或 1 次,等同于 {0,1}
+ 至少一次
() 代表就是一个整体
| 或者
单词边界
sed 文本编辑器(非交互编辑器)非常适合处理大文件
sed [选项] 条件指令(指定行) 文件
-r 扩展正则
-i 直接修改源文件
-n 屏蔽sed的默认输出功能 默认会打印每一行
p 打印 print
d :删除
s 替换 '行号s/old/new/2' 将每一行的第二个替换, 将2 换成g 全部替换
1. clone-vm [快速生成虚拟机]
2.创建一个模板虚拟机 [img,xml]
3. qemu-img ceate [磁盘] b.img
过滤数据 awk
grep (行)
行 列
awk [选项] '/正则/条件指定{print}' 文件 cat pom.xml | awk '/<id>/{print $1}' 或者 awk '/<id>/{print $1}' pom.xml
-F: 指定分隔符为冒号 默认使用的是空格
$1 换成 NR 打印行号 NF 是列数 $NF 最后的字符串