Shell脚本之免交互

Here Document概述

        定义:Here Document是标准输入的一种替代品,使用I/O重定向的方式将命令列表提供给交互式程序。

        用途:帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。

Here Document使用注意事项

        标记可以使用任意合法字符

        结尾的标记一定要顶格写,前面不能有任何字符

        结尾的标记后面也不能有任何字符(包括空格)

        开头标记前后的空格会被省略掉

交互式代码

设置一个用户给用户设置密码
[root@bogon ~]# useradd zhangsan
[root@bogon ~]# vi test.sh
#!/bin/bash
passwd zhangsan <<EOF
123
123
EOF
[root@bogon ~]# sh test.sh

Here Document变量设定

        变量替换:在 Bash 脚本中,变量替换是一种强大的特性,它允许你根据变量的当前值来修改或操作它们

        变量设定:在 Bash 脚本中,Heredoc(Here Document)是一种重定向机制,它允许你将多行文本传递给命令、函数或脚本块。Heredoc 通常与 cat 命令一起使用来创建多行文件内容,但它也可以与其他命令一起使用,用于提供输入

Here Document格式控制

        关闭变量替换功能

        去除每行之前的TAB字符

示例

[root@bogon ~]# cat test.sh
#!/bin/bash
:<<EOF
可以用于多行注释
可以用于多行注释
可以用于多行注释
EOF

Expect概述

        Expect是一个免费的编程工具语言,主要用于实现自动和交互式任务进行通信,而无需人的干预。它允许系统管理员编写脚本来自动执行那些通常需要人工交互的命令或程序。

主要特点

        自动化交互:Expect能够模拟用户的输入,与需要人工交互的命令或程序进行通信,从而实现自动化操作。

        脚本编写:使用Expect语言,管理员可以编写脚本来执行复杂的任务,包括登录到远程系统、执行命令、处理输出等。

        支持多种平台:Expect可以在多种Unix和类Unix系统上运行,如Linux、BSD、Solaris等。

基本语法

        Expect的语法包括expect命令、send命令、spawn命令等。其中,spawn命令用于启动一个进程,expect命令用于等待进程的特定输出,send命令用于向进程发送输入

代码示例操作

[root@bogon ~]# yum -y install expect
#开启两台虚拟机
[root@bogon ~]# vi test.sh
#!/usr/bin/expect

spawn ssh root@192.168.93.145
expect "*(yes/no)*" { send "yes\r"}
expect "*password*" { send "123456\r" }
expect "*#" { send "ifconfig ens33 \r" }

interact
[root@bogon ~]# ./test.sh
或者
[root@bogon ~]# vi test.sh
#!/usr/bin/expect

set timeout 50

spawn ssh root@192.168.93.145

expect {
  "(yes/no)"
  # 匹配的(yes/no)时自动输入yes,exp_continue 表示允许 expect 继续向下执行指令
  {send "yes\r"; exp_continue}
  "*password"
  {send "123456\r"}
}
expect "*#" { send "ifconfig ens33 \r" }

interact

设置一个新用户并且设置密码

[root@bogon ~]# vi kgc1.sh
#!/bin/bash
user=$1
password=$2
useradd $user
expect << EOF
# 开启一个进程跟踪 passwd 命令,expect 只能捕捉该进程信息
spawn passwd $user
# 匹配输出信息"New password:"
expect "新的 密码:"
# 自动输入密码
send "${password}\r"
# 匹配输出信息"Retype new password:"
expect "重新输入新的 密码:"
# 自动输入密码
send "${password}\r"
# 等待结束标记
expect eof;
EOF
[root@bogon ~]# ./kgc1.sh zhaoliu 123
useradd:用户“zhaoliu”已存在
spawn passwd zhaoliu
更改用户 zhaoliu 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

Shell 脚本为自动化任务和减少用户交互提供了强大的工具。通过了解和使用 Shell 脚本的特性和功能,你可以创建出能够处理各种任务的强大脚本,而无需用户手动干预。在编写脚本时,请始终考虑安全性、可维护性和可读性,以确保你的脚本能够可靠地执行并易于其他人理解

  • 32
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值