Interactivo y sin shell

1. Aquí el documento está libre de interacción.

1. Concepto sin interacción

Utilice la redirección de E / S para proporcionar una lista de comandos a programas o comandos interactivos, como ftp, cat o comandos de lectura.
Es un sustituto de la entrada estándar que puede ayudar a los desarrolladores de scripts a no usar archivos temporales para construir información de entrada, sino a generar directamente un "archivo" en el lugar y usarlo como entrada estándar para "comandos". Aquí Document también se puede utilizar con programas y comandos no interactivos.

2. Formato gramatical

命令 <<标记
...
内容    #标记直接是传入内容
...
标记
cat > 3.txt <<EOF
> wo
> shi
> cxy
> EOF

Inserte la descripción de la imagen aquí

Nota: La
marca puede utilizar cualquier carácter legal (normalmente EOF). La
marca final debe estar escrita en el
cuadro superior y no puede haber caracteres delante de la marca final. No debe haber caracteres (incluidos los espacios)
después de la final marcar. los espacios antes y después de la marca de comenzar será omitida.

3. Comandos relacionados

① Manera libre de interacción de realizar las estadísticas del número de filas, poner el contenido a contar entre las etiquetas "EOF" y pasar directamente el contenido a wc -l para las estadísticas

wc -l <<EOF
>wo
>shi
>程序员
>EOF

Inserte la descripción de la imagen aquí
②Recibir la entrada e imprimirla a través del comando de lectura. El valor de entrada es la parte entre las dos etiquetas EOF como el valor de la variable i

read i <<EOF
>Hi
>EOF
echo $i

Inserte la descripción de la imagen aquí
③Establezca una contraseña para el usuario a través de passwd

passwd s5 <<EOF
>123            
>123
EOF

Inserte la descripción de la imagen aquí
④ Admite el reemplazo de variables.
Al escribir el archivo, la variable se reemplazará con el valor real y luego se combinará con el comando cat para completar la escritura.

#!/bin/bash

file="EOF1.txt"
i="school"
cat > $file <<EOF
I am going to $i
EOF
cat EOF1.txt

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
⑤Asigne el valor a la variable como un todo, y luego imprima el valor de la variable a través del comando echo

#!/bin/bash

var="Great! I am going to home!"
i=(computer games)

myvar=$(cat <<EOF
Today is "$(date +%F)". 
I can play $i.
$var.
EOF
)
echo "$myvar"

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

⑥Comentarios de varias líneas El comentario
predeterminado de Bash es "#", este método de comentario solo admite comentarios de una sola línea: La introducción de Here Document resuelve el problema de los comentarios de varias líneas.
":" representa un comando vacío que no hace nada. El contenido del área de la marca media no se ejecutará y bash lo ignorará, por lo que se puede lograr el efecto de los comentarios por lotes

#!/bin/bash

var="Great! I am going to home!"
i=(computer games)

:<<EOF
Today is "$(date +%F)". 
I can play $i.
$var.
EOF

echo "12345"

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Dos, espere interacción

1. Conceptos básicos

Una herramienta construida sobre la base del lenguaje tcl se utiliza a menudo para el control y las pruebas automatizadas para resolver problemas interactivos en scripts de shell.

rpm -q esperar
rpm -q tcl
yum -y instalar esperar

Comandos básicos:
(1) Espera del intérprete de scripts
El archivo se introduce primero en el script para indicar qué shell se utiliza.
#! / usr / bin / esperan

(2) spawn
spawn generalmente es seguido por un comando de ejecución de Linux, lo que significa abrir una sesión, iniciar un proceso y rastrear la información de interacción posterior.
Ejemplo: spawn passwd root

(3) Expect
juzga si el último resultado de salida contiene la cadena especificada y regresa inmediatamente si lo ha hecho; de lo contrario, espera a que regrese el período de tiempo de espera; solo
puede capturar la salida del proceso iniciado por spawn; se
usa para recibir la salida después de que se ejecuta el comando, y luego coincide con la cadena esperada

(4) Enviar
envía una cadena de caracteres al proceso para simular la entrada del usuario; este comando no puede ingresar y avanzar de línea automáticamente, generalmente agregar \ r (retorno de carro) o \ n
Ejemplo:
Método 1:
esperar "contraseña" {enviar " abc123 \ r ”} #La parte de envío de la misma línea debe tener {}

Método dos:
esperar "contraseña"
enviar "abc123 \ r" #La parte de envío no necesita tener {}

Método tres:
esperar admite múltiples ramas

esperar # Siempre que se cumpla una de las condiciones, salga de la declaración de espera después de ejecutar la declaración de envío correspondiente
{ "Contraseña 1" {enviar "abc123 \ r"} "Contraseña 2" {enviar "123456 \ r"} "Contraseña 3 "{enviar" 123123 \ r "} }



(5) El carácter de final
espera eof
indica el final de la interacción, esperando el final de la ejecución y regresando al usuario original, correspondiente al spawn.
Por ejemplo, cuando se cambia al usuario root, el script esperado espera 10 segundos de forma predeterminada, cuando se ejecuta el comando, permanece 10 segundos de forma predeterminada y vuelve automáticamente al usuario original.

Después de que interactúa se
ejecuta, el estado interactivo se mantiene y el control se transfiere a la consola. Permanecerá en la terminal de destino en lugar de regresar a la terminal original. En este momento, puede operarlo manualmente. Los comandos después de interactuar no funciona, como agregar la salida después de interactuar. Y no saldrá del usuario root. Si no hay interacción, cerrará la sesión después de iniciar sesión, en lugar de permanecer en el terminal remoto.
Si usa interact, permanecerá en la terminal en lugar de regresar a la terminal original. Por ejemplo, cuando cambia al usuario raíz, siempre estará en el estado de usuario raíz; por ejemplo, cuando ingresa a otro servidor, siempre estará en la terminal del servidor de destino en lugar de volver al servidor original.

Nota: Solo puede elegir uno de esperar eof e interactuar.

(6) El
tiempo de espera predeterminado establecido es de 10 segundos. El tiempo de espera de la sesión se puede configurar mediante el comando set. Si el tiempo de espera no está limitado, debe establecerse en -1.
Ejemplo: establecer tiempo de espera 30

(7) exp_continue
exp_continue se agrega a un elemento de juicio esperado, de modo que después de que el elemento se empareja, puede continuar coincidiendo con otros elementos en la declaración de juicio esperado. exp_continue es similar a la instrucción continue en la instrucción de control. Indica que se permite esperar para continuar ejecutando instrucciones hacia abajo.
Por ejemplo: el siguiente ejemplo determinará si hay sí / no o * assword en la salida interactiva. Si coincide con sí / no, envíe sí y ejecute el juicio nuevamente; si coincide con * contraseña, envíe abc123 y finalice la declaración de espera.
esperar { "(sí / no)" {enviar "sí \ r"; exp_continue;} "* contraseña" {establecer tiempo de espera 300; enviar "abc123 \ r";} }


Nota: Al usar exp_continue, si rastrea comandos como passwd para finalizar el proceso después de ingresar la contraseña, no agregue esperar eof fuera de espera {}
porque después de que finalice el proceso de generación, enviará eof a esperar por defecto, lo que causará la posterior espera que se ejecute eof. Informar un error

(8) send_user
send_user representa el comando echo, que es equivalente a echo

(9) Recibir parámetros
esperados El script puede aceptar parámetros pasados ​​desde la línea de comando bash y usar [lindex $ argv n] para obtenerlos. Entre ellos, n comienza en 0 y representa el primer, segundo, tercer ... parámetros respectivamente.
Ejemplo:
establecer nombre de host [lindex $ argv 0] es equivalente a nombre de host = $ 1
establecer contraseña [lindex $ argv 1] es equivalente a contraseña = $ 2

2. Espere ejecutar directamente, debe utilizar el comando de espera para ejecutar la secuencia de comandos

①su cambiar de usuario

#! /usr/bin/expect
set timeout 5  #设置超时时间

③Parámetros entrantes

set username [lindex $argv 0]
set password [lindex $argv 1]

④Comando de seguimiento de inicio

spawn su $username

⑤ Sin ejecución interactiva, captura de información y coincide

expect "密码"
send "Spassword\r"
expect "*]#"
send user "ok" 

⑥ Transferir el control a la consola

interact
expect eof

3. Modo de ejecución integrado, integra el proceso de espera en el Shell, que es conveniente para la ejecución y el procesamiento.

#! /bin/bash

#非交互命令放在expect外面
user=$1
password=$2

#开始免交换执行
useradd $user

#expect开始标志
/usr/bin/expect <<-EOF

#开启一个进程跟踪passwd命令,expect只能捕捉该进程信息
spawn passwd $user

expect "新的*" {send "$ {password}\r"}
expect "重新*" {send "$ {password}\r"}
expect eof
EOF

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

4. Realice el inicio de sesión automático ssh

#!/usr/bin/expect

set host [lindex $argv 0]
set passwd [lindex $argv 1]

spawn ssh $host

expect {
#连接失败情况,比如对方ssh服务关闭
 "Connection refused" exit
#找不到服务器,比如输入的IP地址不正确
 "No route to host" exit
 "(yes/no)" {send "yes\r" ;exp_continue}
 "passwd:" {send "$passwd\r"}
}

interact
exit

Inserte la descripción de la imagen aquí

5. Crea un disco sin interacción

método uno

#!/bin/bash

NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEV
do
echo -e "\n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/null
done

mkfs.xfs /dev/${VAR}"1" &> /dev/null

Inserte la descripción de la imagen aquí

Método dos

echo -e "n\np\n\n\n\nw\n" > fd.txt
disk /dev/sdb1 < fd.txt

Inserte la descripción de la imagen aquí

echo "n
p



w" | fdisk /dev/sdb

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/s15212790607/article/details/114879842
Recomendado
Clasificación