shell脚本之从服务器批量下载文件
前言
使用bash与expect写一个从服务器批量下载文件的脚本。记录shell bash expect之间的关系与用法。
什么是shell
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
shell 和 shell script 是两个不同的概念
bash与expect都可以称之为shell,shell相当于是类,bash与expect可以理解成是shell的实例。
bash
介绍
通常bash是默认shell,在编程方面相当优秀,但在处理与用户的交互方面作得不如其他几种 shell。(如下面介绍的expect)
代码示例
定义一个变量和使用一个循环作为展示。
test.sh文件
1 | !/bin/bash |
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。
$@ 输入参数的集合 例如控制台输入 ./test.sh AAA BBB ,$@ 就相当于 [“AAA”,”BBB”]集合
运行
运行前需要取得文件的权限
1 | chmod u+x ./test.sh |
接着执行
1 | ./test.sh AAA BBB |
AAA BBB 是参数可以任意个数
控制台输出
1 | 127.0.0.1 |
127.0.0.1是定义的host变量
AAA和BBB 是入参
expect
介绍
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。
例如在执行ssh连接的时候,会提示输入 password 这个时候使用bash就无法做到自动交互了。
1 | ssh -p 22 root@127.0.0.1 |
代码示例
同样定义一个变量和使用一个循环作为展示。
my_expect
1 | !/usr/bin/expect |
运行
运行前需要取得文件的权限
1 | chmod u+x ./my_expect |
接着执行
1 | expect ./my_expect.sh AAA BBB |
不同点多了个 expect 前缀命令
输出内容与上面完全相同,这里就不做展示了。
批量下载文件
这里展示使用bash与expect,当然也可以只使用expect。
scp_demo
1 | !/bin/bash |
expect -c 执行except脚本。
spawn 获取匹配信息,如果匹配成功则执行expect后面的程序动作。
scp secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
send 用于发送指定的字符串信息
interact 留在控制台中手动执行后续命令操作
执行
1 | cd 文件所在路径 |
等待文件下载完成即可,当然也也可把下载文件改成参数传入形式的,参考上面的代码即可,这里就不做演示了。