shell脚本的练习

创建一个以.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 最后的字符串

    

      

  

  

 

 

 

  

原文地址:https://www.cnblogs.com/chengyangyang/p/9674853.html