[Notas de estudio de Linux 31] flujo de ejecución de shell (para, mientras, hasta, si, caso, esperar, interrumpir, continuar, salir)

1. para bucle


格式:
for 变量 in item1 item2 … itemN
do
  语句1
  语句2
done


写成一行:
for 变量 in item;do 语句1;语句2 done;


La declaración for define cuatro formas de variables

for var in $(seq 起点 终点 步长)
for var in 1 2 3 ... 10
for var in{
    
    1..10}
for((var=0;var<10;var++))
#无限循环
for (( ; ; ))

Ejercicio 1:

Script: check_host.sh
detecta si 10 hosts y su host actual están conectados directamente al host que está desbloqueado, si está desbloqueado, se mostrará la lista de IP del host


#!/bin/bash
for i in {
    
    1..10}
do
	ping -c1 -w1 172.25.254.$i &> /dev/null && {
    
    
		echo " 172.25.254.$i tongchang !"
	} 
done

Inserte la descripción de la imagen aquí

Ejercicio 2:

Script create.sh

  1. Crea usuarios automáticamente
  2. Agregue el archivo de nombre de usuario y el archivo de contraseña después del script
  3. Detecta automáticamente si el usuario en el archivo de usuario existe y lo crea automáticamente si no existe, y la contraseña es el contenido del archivo de contraseña correspondiente.

#!/bin/bash
length=`sed -n '$=' user_file`
for LINE in `seq 1 $length`
do
	uName=`sed -n ${
     
     LINE}p $1`
	uPass=`sed -n ${
     
     LINE}p $2`
	id $uName &> /dev/null && {
    
     
		echo "$uName is exist !"
	} || {
    
    
			useradd $uName
			echo $uPass | passwd --stdin $uName &> /dev/null 
			echo "$uName is created !"
		}
done

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí



2. Bucle while (la condición es verdadera)


while 条件
do
  语句1
  语句2
done


Formato de bucle infinito 1:

while true
do
  语句
done


Formato de bucle infinito 2:

while :
do
  语句
done


3. hasta bucle (la condición es falsa)


El bucle hasta ejecuta una serie de comandos hasta que la condición es verdadera y se detiene.
El bucle hasta y el bucle while se manejan de manera opuesta.
Generalmente, el ciclo while es mejor que el ciclo hasta, pero en algunos casos, y solo en casos raros, el ciclo hasta es más útil.


until 条件
do
  语句1
  语句2
done


4. si


if 条件
then
  语句
elif 条件
then
  语句
else
  语句
fi


(Si la rama else no tiene ninguna declaración para ejecutar, no escriba esto más)

Ejercicio 1:

check_file.sh
detecta si el archivo existe y determina el tipo de archivo


#!/bin/bash
while true
do
	read -p "Please input filename:" fileName
	
	if [ "$fileName" == "exit" ]
	then
		exit
	fi

	if [ -e "$fileName" ]
	then
		if [ -f "$fileName" ]
		then
			echo "$fileName is 普通文件 ! "
		elif [ -d "$fileName" ]
		then
			echo "$fileName is 目录 ! "
		elif [ -S "$fileName" ]
		then
			echo "$fileName is 套接字 ! "
		elif [ -L "$fileName" ]
		then
			echo "$fileName is 软链接 ! "
		elif [ -b "$fileName" ]
		then
			echo "$fileName is 块设备 ! "
		elif [ -c "$fileName" ]
		then
			echo "$fileName is 字符设备 ! "
		fi
	else
		echo "$fileName is not exist !"
	fi

done

Inserte la descripción de la imagen aquí



5. caso


La declaración del caso es una declaración de opción múltiple. Puede utilizar la declaración de caso para hacer coincidir un valor y un patrón. Si la coincidencia es exitosa, ejecute el comando coincidente


casein
模式1)
  语句
  ;;
模式2)
  语句
  ;;
*)
  语句
  ;;
esac


(" *) " indica otras circunstancias)


Ejercicio:

Agregue disco o memoria o cargue después de system_watch.sh, ejecute de la siguiente manera:

  1. monitor de disco uso del disco
  2. uso de la memoria del monitor de memoria
  3. cargar monitor iniciar carga
  4. Pantalla por segundo

#!/bin/bash
while true
do
	[ "$1" = "exit" ] && {
    
    
		exit
		}
	case $1 in
	disk|DISK)
		watch -n 1 "df -h "
		exit
		;;
	memory|MEMORY)
		watch -n 1 "free -m"
		exit
		;;
	upload|UPLOAD)
		watch -n 1 "uptime"
		exit
		;;
	esac
done


6. Espere una conversación automática


dnf install expect -y: Instalar esperar

Script de preguntas: ask.sh (otorgar permiso de ejecución)

#!/bin/bash
read -p "What's your name: " NAME
read -p "How old are you: " AGE
read -p "which class? " CLASS
read -p "How do you feel? " FEEL
echo $NAME is $AGE\'s old study $CLASS fell $FEEL

Script de respuesta 1: answer.exp

#!/usr/bin/expect
spawn /mnt/ask.sh
expect "name"
send "tom\r"
expect "old"
send "18\r"
expect "class"
send "linux\r"
expect "feel"
send "happy\r"
expect eof


Script de respuesta 2: answer.exp

#!/usr/bin/expect
set timeout 2
spawn /mnt/ask.sh

expect {
    
    
"name" {
    
     send "tom\r"; exp_continue }
"old" {
    
     send "18\r"; exp_continue }
"class" {
    
     send "linux\r" ; exp_continue }
"feel" {
    
     send "happy\r" }
}
expect eof


Script de respuesta 3: answer.exp

#!/usr/bin/expect
set NAME [ lindex $argv 0 ]
set AGE [ lindex $argv 1 ]
set CLASS [ lindex $argv 2 ]
set FEEL [ lindex $argv 3 ]

set timeout 2
spawn /mnt/ask.sh

expect {
    
    
"name" {
    
     send "$NAME\r" ; exp_continue }
"old" {
    
     send "$AGE\r" ; exp_continue }
"class" {
    
     send "$CLASS\r" ; exp_continue }
"feel" {
    
     send "$FEEL\r" }
}
expect eof


Script de respuesta 4: answer.sh

#!/bin/bash
echo hello zy !
/usr/bin/expect <<EOF
set timeout 2
spawn /mnt/ask.sh

expect {
"name" { send "$1\r" ; exp_continue }
"old" { send "$2\r" ; exp_continue }
"class" { send "$3\r" ; exp_continue }
"feel" { send "$4\r" }
}
expect eof
EOF


Ejercicio:

host_list.sh
detecta si la red 172.25.254.1-172.25.254.10 está normalmente encendida, si la red es normal, genere una lista de resolución host_list


#!/bin/bash
EXPECT()
{
    
    
/usr/bin/expect <<EOF
set timeout 2
spawn ssh root@$1 hostname
expect {
"yes/no?" { send "yes\r" ;
    expect "password:" ;
    send "$2\r";
    exp_continue; }
"password:" { send "$2\r" }
}
expect eof
EOF
}

for i in {
    
    1..10}
do
    ping -c1 -w1 172.25.254.$i &> /dev/null
    if [ "$?" = "0" ]
    then
        host_name=`EXPECT 172.25.254.$i westos | tail -n 1`
        grep $host_name /mnt/host_list &> /dev/null || {
    
    
            echo "172.25.254.$i $host_name" >> /mnt/host_list
        }
    fi  
done
sed 's/^M//g' -i /mnt/host_list
#^M为<ctrl>+<V>+<M>

Inserte la descripción de la imagen aquí



7. Salir del bucle (romper y continuar y salir)


romper: Permitir saltar de todos los bucles (terminar todos los bucles después de la ejecución)

Seguir: No saltará de todos los bucles, solo del bucle actual

salida:abandonar

Supongo que te gusta

Origin blog.csdn.net/weixin_46069582/article/details/111416105
Recomendado
Clasificación