Use expect on linux

expect command in Linux with Examples

expect command or scripting language works with scripts that expect user inputs. It automates the task by providing inputs.

// We can install expect command using following if not installed // On Ubuntu $sudo apt install expect // On Redhat based systems $ yum install expect

First we write a script that will be needing inputs from users and then we will write another script using expect to automate the task.

#!/bin/bash echo "Enter your name" read $REPLY echo "Enter your age" read $REPLY echo "Enter your salary" read $REPLY

Ok, so let’s write down the script to answer questions of the above script.

#!/usr/bin/expect -f set timeout -1 spawn ./que.sh expect "Enter your name\r" send -- "I am Nikhil\r" expect "Enter your age\r" send -- "24\r" expect "Enter your salary\r" send -- "100k\r" expect eof

The first line defines the expect command path which is #!/usr/bin/expect . On the second line of code, we disable the timeout. Then start our script using spawn command. We can use spawn to run any program we want or any other interactive script. The spawn command is used to start a script or a program like the shell, FTP, Telnet, SSH, SCP, and so on. The remaining lines are the Expect script that interacts with our shell script. The last line is the end of file which means the end of the interaction. First we have to make the file executable and then run it.You can do this by typing the following:

$ chmod +x ./ans.sh $ ./ans.sh

This will produce an output like this : Output:

To build an expect script automatically, you can the use autoexpect command.autoexpect works like expect, but it builds the automation script for you. The script you want to automate is passed to autoexpect as a parameter and you answer the questions and your answers are saved in a file.

$ autoexpect ./que.sh 

A file is generated called script.exp contains the same code as we did above with some additions. if you run the file script.exp you will see the same answers that you provided.

Читайте также:  Linux console test internet speed

Источник

Linux expect Command With Examples

System administrators automate repetitive tasks all the time. Bash scripts provide many programs and features to carry out system automation tasks. The expect command offers a way to control interactive applications which require user input to continue.

This article explains how to use the expect command with practical examples.

Linux expect Command With Examples

  • Access to the command line/terminal.
  • An account with sudo permissions.
  • A text editor, such as Vim or nano.

Linux expect Command Syntax

The expect command runs Expect program scripts using the following syntax:

expect [options] [commands/command file]

The Except program uses the following keywords to interact with other programs:

Command Function
spawn Creates a new process.
send Sends a reply to the program.
expect Waits for output.
interact Enables interacting with the program.

Expect uses TCL (Tool Command Language) to control the program flow and essential interactions.

Some systems do not include Expect by default.

To install it with apt on Debian-based systems, run the following in the terminal:

Alternatively, use yum on Red Hat-based systems:

Follow the installation instructions to complete the setup.

Linux expect Command Options

Below is a table describing available command options for the expect command:

Command Description
-c Specifies the command to execute before the script.
-d Provides a brief diagnostic output.
-D Interactive debugger.
-f Specifies a file to read from.
-i Prompts commands interactively.
-b Reads file line by line (buffer).
-v Print version.

Linux expect Command Examples

The next sections provide practical examples of the expect command, which executes Expect program scripts. To make an Expect script executable, add the following shebang at the start of each script:

The location differs depending on the system. To find the exact path, use:

Exchange the location if Expect is at a different location.

Basic Expect Use

Below is a basic example that explains how the expect command functions:

1. Open a text editor and name the file interactive_script.sh. If you use Vim, run:

2. Add the following code to the file:

#!/bin/bash echo "Hello, who is this?" read $REPLY echo "What's your favorite color?" read $REPLY echo "How many cats do you have?" read $REPLY

interactive_script.sh contents

The code is a basic script with the read command that expects user interaction when run.

Читайте также:  Linux create bootable image

3. Save the file and close Vim:

4. Change the script to executable:

chmod +x interactive_script.sh

5. Create a new file to store the Expect script with:

The .exp extension is not mandatory, though it helps differentiate Expect scripts from other files.

6. Add the following code to the script:

#!/usr/bin/expect spawn ./interactive_script.sh expect "Hello, who is this?\r" send -- "phoenixNAP\r" expect "What's your favorite color?\r" send -- "Blue\r" expect "How many cats do you have?\r" send -- "1\r" expect eof

expect_response.exp contents

The script consists of the following lines:

  • spawn creates a new process running the interactive_script.sh file.
  • expect writes the expected program message and waits for the output. The final line ends the program.
  • send contains the replies to the program after each expected message.

7. Save the file and close:

8. Make the script executable:

chmod +x expect_response.exp
expect expect_response.exp

expect expect_response.exp terminal output

The expect_response.exp script spawns the program process and sends automatic replies.

Expect with Variables

Use the set command to store variables and pass values in Expect scripts. For example, to hardcode a variable, use:

For user input arguments use:

set MYVAR1 [lindex $argv 0] set MYVAR2 [lindex $argv 1]

In both cases, reference the variable in the script with $ .

The following example demonstrates using both variables in the Expect script from the previous example (expect_response.exp):

#!/usr/bin/expect set NAME "phoenixNAP" set COLOR "Blue" set NUMBER [lindex $argv 0] spawn ./interactive_script.sh expect "Hello, who is this?\r" send -- "$NAME\r" expect "What's your favorite color?\r" send -- "$COLOR\r" expect "How many cats do you have?\r" send -- "$NUMBER\r" expect eof

expect script with variables

Passing a number specifies the $NUMBER variable:

expect_response.exp variables terminal output

The other two variables ( $NAME and $COLOR ) are hardcoded.

Expect with Commands

Use the expect command to automate responses to other programs and commands.

For example, the passwd command prompts the user to input the password twice. While the process is simple for one user, difficulties arise when adding a default password for hundreds of new users as a system administrator.

Читайте также:  Linux echo to all terminals

Expect easily automates the responses to other commands.

1. The following script provides an example of using the expect command with the passwd command:

#!/usr/bin/expect set USER [lindex $argv 0] set PASS [lindex $argv 1] set timeout 1 spawn passwd $USER expect -exact "Enter new UNIX password: " send -- "$PASS\r" expect -exact "Retype new UNIX password: " send -- "$PASS\r" expect eof

expect password user input script

The code takes two passed arguments as the username and password to provide for the passwd command.

sudo expect passwd.exp terminal output

The script automatically sets the password for the provided username.

3. To automate the task for multiple users, use a while loop. The syntax for the TCL while loop is different from the Bash while loop:

#!/usr/bin/expect set PASS «Welcome@123» set i 1 set timeout 1 while

expect password change multiuser

The script assumes all users have the username user1 , user2 , etc., up to user10 . The password is hardcoded as Welcome@123 . After each user, the code increments the i value.

sudo expect passwd.exp multiuser terminal output

For the code to work, the example assumes the users already exist on the system.

Note: Exposing the script in any way makes the default password vulnerable. After this step, all users should change their password to a stronger password and opt-in for a password manager.

Autoexpect

Instead of writing Expect scripts from scratch, the Autoexpect program helps generate scripts interactively.

To demonstrate how Autoexpect works, do the following:

1. Run the Bash script from the first example (interactive_script.sh) using Autoexpect:

autoexpect ./interactive_script.sh

autoexpect script generation terminal output

The output prints a confirmation message and the Expect script name (script.exp) to the console.

2. Provide answers to the questions. The replies save to the script.exp file and generate the Expect program code automatically. When complete, the output prints a confirmation.

3. Review the generated script in a text editor to see the code:

autoexpect script contents

The interactions are saved to the Expect script for future use.

After following the steps from this guide, you know the purpose of Expect scripts, the expect command, and some use cases.

Expect is a powerful automation tool for system administration tasks and code testing. Use the man command to review the complete manual for Expect.

Источник

Оцените статью
Adblock
detector