一、引言
Shell是Linux内置的一种功能强大的交互脚本语言,其本质就是系列Linux命令的逻辑组合,熟悉Shell脚本编写对提升工作效率大有益处。
交互性Shell脚本用途更多,可轻松实现自动化软件安装卸载、自动化远程登录等各种需要用户密切参与的场景,下面通过几个实例演示一下交互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
然后执行看下效果:
三、自动登录操作实例
首先需要安装expect软件包:
$ sudo apt install expect
3.1 切换到root用户
首先看下手动操作的命令过程:
注意上图中在提示输入密码时显示的”密码:”字符串,如果是英语语言系统,这里就变成了”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
执行看下效果:
3.2 自动登录远程服务器
首先看下手动登录远程服务器的命令过程:
注意上面的”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地址和用户名及密码去进行替换。
该脚本会自动登录进入到系统,无需任何操作,执行看下效果:
如果未给脚本文件赋予可执行权限,通过expect也能执行:
$ expect autossh.exp
暂无评论内容