shell脚本进阶-EOF

EOF 多行重定向

  执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了!
这个时候,就可以使用EOF结合cat命令进行行内容的追加了。EOF一般会配合cat能够多行文本输出.

  cat  本质上是对于输入的内容进行打印,支持标准输入,所以后面可以跟文件,把文件的内容进行打印,直接cat是针对于一行的操作,如 cat >>cattest.txt  向文件中追加内容,是一行一行的追加,输入一行回车后,就会把一行的内容写入到文件中,实时生效的。而如果使用了EOF多行重定向技术,则不是一行一行的生效,而是一次性的输出了多行或向文件中添加了多行。这种可以用于脚本中,通过脚本去修改一个文件多行内容。

  cat  << EOF   //输出多行

 cat >> cattest.txt  << EOF                  //或者cat << EOF >> cattest.txt          //向文件中添加多行

   cat > cattest.txt  << EOF                  //或者cat << EOF > cattest.txt          //向文件中添加多行覆盖

 

 

for循环

 

在脚本中 两种写法,不同的习惯而已

     

循环1到100内的奇数之和

 

 

 

函数

declare -f  查看当前所有函数,包括系统的函数
declare -F  只看函数名字
函数定义只针对于当前窗口有效,退出就没有了
unset funcname  删除方法

 脚本 func_test

定义了一个函数,用的时候 就和命令一样直接写函数名称,不带()

  函数定义与调用函数 相分离,就是专门定义一些函数,然后每个脚本都可以调用

一个文件专门定义函数 ,这个functions文件 全部定义了函数,

 脚本里面调用函数  通过sources 引入函数文件

 

 函数也可以使用参数

 

 信号捕捉

  • trap '触发指令' 信号  进程收到系统发出的指定信号后,将执行自定义指令,而不会执行原操作
  • trap '' 信号  忽略信号的操作
  • trap '-' 信号  恢复原信号的操作
  • trap -p  列出自定义信号操作
  • trap finish EXIT   当脚本退出时,执行finish函数
  • trap finish EXIT  脚本退出时,运行的函数,无论什么样的退出,错误的还是正常退出都会发生的。

      

 

数组

数组:存储多个元素的连续的内存空间,相当于多个变量的集

数值数组,不用声明,可以直接用,而自定义数组需要先声明

 

增加一个新的元素,在最后面, 因为是从0开始的,所以最后一位就是数组的个数

 

数组 一次赋多个值,可以看出本质上就是 空格隔开,这种结构可以有很多种方式实现

 

 

 稀疏数组,不连续

 

 交互式的赋值

 

 自定义下标,就是关联数组,必须先声明,后使用,上面的都是不用声明直接使用的

 

字符串截取

 

 

declare [选项] 变量名

  • -r 声明或显示只读变量
  • -i 将变量定义为整型数
  • -a 将变量定义为数组
  • -A 将变量定义为关联数组
  • -f 显示已定义的所有函数名及其内容
  • -F 仅显示已定义的所有函数名
  • -x 声明或显示环境变量和函数
  • -l 声明变量为小写字母 declare –l var=UPPER
  • -u 声明变量为大写字母 declare –u var=lower

 

eval命令 

该命令对变量进行两次扫描 

[root@server ~]# CMD=whoami

[root@server ~]# echo  $CMD 

  whoami

[root@server ~]# eval $CMD 

  root     

[root@server ~]# n=10             

[root@server ~]# echo {0..$n}         

  {0..10}     

[root@server ~]# eval echo {0..$n}     

  0 1 2 3 4 5 6 7 8 9 10 

 

mktemp 创建临时文件

mktemp  fileXXXX

 

 -d: 创建临时目录 

-p DIR或--tmpdir=DIR:指明临时文件所存放目录位置 

 

install 复制命令 顺便可以设置权限

 

 expect

有时候我们执行命令,会交互式的问你,等待用户去输入东西,那如果是写在脚本中,也会提示让你输入的,但是我们写在脚本中,就是为了自动化的,所以可以使用expect工具,当出现某一些字符的时候,可以自动输入一些字符。

比如我们可以自动化的传一个文件,到很多台服务器上,以前的方式就是我们手动一个一个传,那多累,有脚本瞬间可以完成一百台服务器的文件拷贝工作。就是通过expect完成。

 

posted @ 2019-12-16 14:17  我才是酷酷的飞  阅读(2069)  评论(0编辑  收藏  举报