Interactivo y sin shell
- 1. Aquí el documento está libre de interacción.
- Dos, espere interacción
-
- 1. Conceptos básicos
- 2. Espere ejecutar directamente, debe utilizar el comando de espera para ejecutar la secuencia de comandos
- 3. Modo de ejecución integrado, integra el proceso de espera en el Shell, que es conveniente para la ejecución y el procesamiento.
- 4. Realice el inicio de sesión automático ssh
- 5. Crea un disco sin interacción
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
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
②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
③Establezca una contraseña para el usuario a través de passwd
passwd s5 <<EOF
>123
>123
EOF
④ 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
⑤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"
⑥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"
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
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
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
Método dos
echo -e "n\np\n\n\n\nw\n" > fd.txt
disk /dev/sdb1 < fd.txt
echo "n
p
w" | fdisk /dev/sdb