Shell编程之免交互的实现示例

 更新时间:2024年06月28日 09:38:12   作者:与苟富贵  
对于Linux操作系统中,有许多操作都会触及到交互,本文主要介绍了Shell编程之免交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一,Here Document 免交互

1:Here Document概述

Here Document,简称Heredoc,是Shell脚本中一种特殊的输入重定向方式,允许你插入多行文本到命令中,作为输入数据源。它由一个起始标记界定开始,以相同标记结束(通常该标记位于一行的开始),并且在结束标记前可以包含任意文本,甚至是变量和命令的输出。

2:Here Document 免交互

Heredoc设计用于简化向脚本或命令提供多行数据的过程,避免了手动输入或交互式对话的需求,特别适用于自动化脚本的编写。

(1).通过read命令接收输入并打印

虽然read命令直接与Here Document无关,但提到免交互,可以对比说明。常规使用read时需要用户逐行输入,而使用Heredoc,可以预先定义好要输入的多行文本,实现自动化:

# 使用Here Document代替read的交互过程
cat <<EOF
This is the first line.
This is the second line.
EOF

(2).通过passwd给用户设置密码

Here Document在非交互式地设置用户密码时非常有用,避免了手动输入密码的步骤:

sudo passwd username <<EOF
newPassword123
newPassword123  # 确认密码
EOF

注意:出于安全考虑,某些系统或版本的passwd命令可能不接受来自stdin的密码输入。

3:Here Document 变量设定

在Heredoc中,可以方便地插入和使用变量,实现动态内容生成:

greeting="Hello"
name="Alice"
cat <<EOF
${greeting}, ${name}!
EOF

4:Here Document 格式控制

Heredoc支持所有文本格式化控制,包括转义序列(如\n换行、\t制表符)和多行文本,适用于生成格式化输出,如配置文件、HTML等:

#bash
  cat <<EOF
  <html>
  <head>
  <title>Welcome</title>
  </head>
  <body>
  <h1>Hello, World!</h1>
  </body>
  </html>
  EOF

5:Here Document 多行注释

尽管不推荐作为主要的注释方式,但Here Document可以用作多行注释的一种非传统方法:

: <<'COMMENT'
这是一个
多行注释
不会展开变量
COMMENT

注意:使用单引号包围结束标记以阻止变量展开,保持注释内容原样输出。然而,标准的井号#仍然是推荐的单行或多行注释方式。

二,expect 免交互

1:expect 概述

Expect 是一个强大的自动化和测试工具,它使用Tcl语言编写,专为处理交互式程序设计,如那些需要用户输入密码或对提示做出响应的程序。通过期望(expect)特定的输出并发送(send)相应的回复,expect脚本能模拟人类与命令行应用程序的交互,从而实现自动化操作,无需人工介入。

2:expect 安装

在Linux系统中,expect通常作为一个独立的软件包存在,可以通过包管理器安装:

  • Debian/Ubuntusudo apt-get install expect
  • Fedora/RHEL/CentOSsudo yum install expect 或 sudo dnf install expect
  • macOS: 可以通过Homebrew安装,brew install expect

3:基本命令介绍

(1)脚本解释器

每个expect脚本通常以#!/usr/bin/expect作为第一行,指定了脚本的解释器。

(2)expect/send

  • expect: 等待从进程接收到的输出匹配给定的模式,然后执行后续命令。
  • send: 向进程发送字符串,模拟用户输入。通常需要\r来模拟回车键。

(3)spawn

  • 用于启动一个新的子进程,并将该进程与expect脚本连接起来,以便对其进行交互。

(4)结束符

expect可以使用-exact-glob-regexp等选项来指定匹配模式的类型。

(5)set

用于设置变量,如set variable value

(6)exp_continue

在满足expect条件后,使用exp_continue可以继续执行下一次expect,而不是退出当前循环。

(7)send_user

类似于print或echo,但只输出到控制台,不发送给进程,用于调试或状态反馈。

(8)接收参数

脚本可以通过1,2等变量获取命令行参数,如set arg1 [lindex $argv 0]

4:expect 语法

(1)语法结构

基本结构包括spawn启动进程,一系列expect和send交互,以及最后的流程控制。

(2)expect 执行方式

脚本可以直接执行,或在shell脚本中调用expect命令执行。

5:expect 案例

(1)创建用户并设置密码

#!/usr/bin/expect
set username "newuser"
set password "secretpassword"
spawn useradd $username
expect "Enter new UNIX password:"
send "$password\r"
expect "Retype new UNIX password:"
send "$password\r"
interact

(2)实现ssh自动登录

#!/usr/bin/expect
set user "remote_username"
set host "remote_host"
set password "remote_password"
spawn ssh $user@$host
expect {
    "(yes/no)?" { send "yes\r"; exp_continue }
    "password:" { send "$password\r" }
}
interact

(3)利用 expect 完成 FTP 登录过程

#!/usr/bin/expect
set ftp_server "ftp.example.com"
set ftp_user "ftp_username"
set ftp_password "ftp_password"
spawn ftp $ftp_server
expect "Name .*:"
send "$ftp_user\r"
expect "Password:"
send "$ftp_password\r"
expect "ftp>"
send "ls\r"
expect "ftp>"
send "quit\r"

这些案例展示了expect在自动化管理任务,如用户管理、远程登录和文件传输等方面的强大功能,通过模拟用户交互,实现无须人工干预的脚本执行。

到此这篇关于Shell编程之免交互的文章就介绍到这了,更多相关Shell 免交互内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux基础命令last 命令实例详解

    Linux基础命令last 命令实例详解

    Linux last命令用于显示系统开机以来获是从每月初登入者的讯息。本文主要给大家介绍Linux基础命令last 命令实例详解,感兴趣的朋友跟随小编一起看看吧
    2018-10-10
  • Linux命令定位与查找之which、whereis和find的用法示例详解

    Linux命令定位与查找之which、whereis和find的用法示例详解

    Linux命令的定位与查找是我们日常工作中必备的技能,掌握which、whereis和find这三个命令,可以帮助我们更加高效地进行文件搜索和定位工作,这篇文章主要介绍了Linux命令定位与查找:which、whereis和find的用法详解,需要的朋友可以参考下
    2023-10-10
  • linux shell中Grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字)

    linux shell中Grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字)

    grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,下面这篇文章主要给大家介绍了关于linux shell中Grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字)的相关资料,需要的朋友可以参考下
    2022-08-08
  • shell监控系统资源并通过短信报警的脚本

    shell监控系统资源并通过短信报警的脚本

    这篇文章主要介绍了shell监控系统资源并通过短信报警的脚本,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • shell实现猜数字小游戏

    shell实现猜数字小游戏

    这篇文章主要为大家详细介绍了shell实现猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • Linux Shell字符串变量拼接与赋值的使用

    Linux Shell字符串变量拼接与赋值的使用

    本文主要介绍了Linux Shell字符串变量拼接与赋值的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Shell脚本命令行批处理bash sh cmd bat函数极简学法

    Shell脚本命令行批处理bash sh cmd bat函数极简学法

    这篇文章主要为大家介绍了Shell脚本中文英文多语言国际化和命令行批处理(bash sh cmd bat)中定义函数的简单写法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2023-09-09
  • Bash 脚本实现每次登录到 Shell 时可以查看 Linux 系统信息

    Bash 脚本实现每次登录到 Shell 时可以查看 Linux 系统信息

    这篇文章主要介绍了Bash 脚本实现每次登录到 Shell 时可以查看 Linux 系统信息,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-12-12
  • rhel5.7下安装gearmand及启动的方法

    rhel5.7下安装gearmand及启动的方法

    这篇文章主要介绍了rhel5.7下安装gearmand及启动的方法,需要的朋友可以参考下
    2014-07-07
  • Git 常用命令整理

    Git 常用命令整理

    本文主要介绍了Git 命令,这里对Git 常用命令进行了整理,在开发项目过程中足够用了,有需要的小伙伴可以参考下
    2016-07-07

最新评论