Linux交互Shell脚本实例详解

一、引言

Shell是Linux内置的一种功能强大的交互脚本语言,其本质就是系列Linux命令的逻辑组合,熟悉Shell脚本编写对提升工作效率大有益处。

交互性Shell脚本用途更多,可轻松实现自动化软件安装卸载、自动化远程登录等各种需要用户密切参与的场景,下面通过几个实例演示一下交互Shell脚本的使用。

图片[1]-Linux交互Shell脚本实例详解-不念博客
Linux交互Shell脚本

二、从用户端接收参数实例

创建一个test.sh的脚本,输入以下内容:

#!/bin/bash
read -p "请输入起始日期(yyyymmdd):" d1
read -p "请输入结束日期(yyyymmdd):" d2
read -p "起始日期$d1 ~ 结束日期$d2,共XX条记录,是否确认删除(Y/N), 默认为N:" c
if [ "$c" = "Y" ]; then
echo "共删除XX条记录。"
else
echo "删除操作被取消!"
fi

保存后赋予可执行权限:

$ chmod +x test.sh

然后执行看下效果:

图片[2]-Linux交互Shell脚本实例详解-不念博客
Linux交互Shell脚本

三、自动登录操作实例

首先需要安装expect软件包:

$ sudo apt install expect

3.1 切换到root用户

首先看下手动操作的命令过程:

图片[3]-Linux交互Shell脚本实例详解-不念博客
Linux交互Shell脚本

注意上图中在提示输入密码时显示的”密码:”字符串,如果是英语语言系统,这里就变成了”password:”了,下面的自动化切换用户脚本里面会使用这个字符串,所以需要根据实际语言系统情况修改。

创建一个ch2root.sh的脚本(或者是ch2root.exp也行,保存后记得赋予可执行权限):

#!/usr/bin/expect
spawn su root
expect "密码:"
send "rootpassword\r"
expect eof
exit

注意:需要将脚本里面的”rootpassword”换成真实的root密码才行。

通过脚本可以看到,第一行不是常规Shell脚本的”#!/bin/bash”了,表示该脚本由expect这个工具解析执行,所以文件名以.exp后缀也是可以的。

上面的脚本在切换到root之后就退出root终端了,如果希望保留在root终端内,需要对脚本的最后两行进行修改(文件ch2root2.sh):

#!/usr/bin/expect
spawn su root
expect "密码:"
send "rootpassword\r"
interact

执行看下效果:

图片[4]-Linux交互Shell脚本实例详解-不念博客
Linux交互Shell脚本

3.2 自动登录远程服务器

首先看下手动登录远程服务器的命令过程:

图片[5]-Linux交互Shell脚本实例详解-不念博客
Linux交互Shell脚本

注意上面的”password:”字符串,表明服务器系统是英语语言环境。需要人工输入密码认证通过后才能进入到系统,否则就一直停留在该等待认证时刻。

登录命令的两种写法”ssh root@ipaddr”和”ssh -l root ipaddr”效果是完全一样的。

创建一个autossh.exp(此处使用.sh后缀也能正常执行的)的脚本文件:

#!/usr/bin/expect
set timeout 60
spawn ssh -l root server_ip_addr
expect "password:"
send "your_password\r"
interac

“set timetou”是设置登录超时时间为60秒;需要使用真实的服务器IP地址和用户名及密码去进行替换。

该脚本会自动登录进入到系统,无需任何操作,执行看下效果:

图片[6]-Linux交互Shell脚本实例详解-不念博客
Linux交互Shell脚本

如果未给脚本文件赋予可执行权限,通过expect也能执行:

$ expect autossh.exp
© 版权声明
THE END