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循环

 

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

     

函数

declare -f
declare -F
函数定义只针对于当前窗口有效
unset funcname  删除方法

脚本 func_test
函数定义与调用函数 相分离
函数也可以使用参数

 信号捕捉

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

      

数组

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

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

 

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

 

 

 稀疏数组,不连续

 交互式的赋值

 自定义下标

字符串截取

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完成。

要有多努力才能对得起奔波的脚步和身上的期望
原文地址:https://www.cnblogs.com/hxfcodelife/p/12019866.html