Linux debería aprender de esta manera: declaraciones condicionales

para declaración de bucle condicional

La instrucción de bucle for permite que el script lea información múltiple a la vez y luego manipule la información una por una. Cuando los datos que se van a procesar tienen un rango, la instrucción de bucle for es más adecuada y ejecuta el script de Shell Example.sh que crea usuarios en lotes. Después de ingresar la contraseña establecida para la cuenta, el script verificará y creará automáticamente estas cuentas. Dado que la información redundante se ha transferido al archivo de agujero negro / dev / null a través del carácter de redirección de salida

[root@myserver ~]# cat users.txt 
ndy
barry
carl
duke
eric
george
[root@myserver ~]# cat Example.sh 
#!/bin/bash
 read -p "Enter The Users Password : " PASSWD
 for UNAME in `cat users.txt`
 do
	 if [ $? -eq 0 ]
	 then
		 echo "Already exists"
	 else
		 useradd $UNAME &> /dev/null
		 echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
		 if [ $? -eq 0 ]
		 then
			 echo "$UNAME , Create success"
		 else
			 echo "$UNAME , Create failure"
		 fi
	 fi
 done
[root@myserver ~]# 

 En un sistema Linux, / etc / passwd es un archivo que se usa para guardar la información de la cuenta del usuario. Si desea confirmar si este script creó correctamente una cuenta de usuario, puede abrir este archivo para ver si hay esta información de usuario recién creada

[root@myserver ~]# sh Example.sh 
Enter The Users Password : linuxprobe
ndy , Create success
barry , Create success
carl , Create success
duke , Create success
eric , Create success
george , Create success
[root@myserver ~]# 

Ejercicio: cuenta regresiva de 5 segundos

[root@myserver ~]# cat example1.sh 
#!/bin/bash
echo "准备倒数5秒:"
for i in $(seq 5 -1 1)
do
	  echo -en "$i";sleep 1
  done
  echo -e "开始"
[root@myserver ~]# sh example1.sh 
准备倒数5秒:
54321开始
[root@myserver ~]# 

while declaración de bucle condicional

La instrucción de bucle condicional while es una instrucción que permite que el script ejecute comandos repetidamente en función de ciertas condiciones. Su estructura de bucle a menudo no es segura del número final de ejecuciones antes de que se ejecute, que es completamente diferente del uso de una instrucción de bucle for que tiene un objetivo y un rango de escenas. La instrucción del ciclo while determina si continuar ejecutando el comando juzgando el verdadero o falso de la prueba de condición.Si la condición es verdadera, continúa ejecutándose, y si es falsa, finaliza el ciclo. El formato gramatical de la instrucción while se muestra en la Figura 4-21.Capítulo 4 Editor de Vim y secuencia de comandos de shell.  Capítulo 4 Editor de Vim y secuencia de comandos de shell.

Figura 4-21 El formato de sintaxis de la instrucción de bucle while

A continuación, use la instrucción de prueba condicional if de múltiples ramas y la instrucción de bucle condicional while para escribir un script Guess.sh que se usa para adivinar la magnitud del valor. El script usa la variable $ RANDOM para recuperar un valor aleatorio (rango 0 ~ 32767), realiza la operación restante en este número aleatorio hasta 1000 y usa el comando expr para obtener el resultado, y luego usa este valor para comunicarse con el usuario a través del comando de lectura El valor ingresado se compara y juzga. Esta sentencia de juicio se divide en tres situaciones, que son para juzgar si el valor ingresado por el usuario es igual, mayor o menor que el valor obtenido mediante el comando expr. En la actualidad, estos contenidos no son el foco. A lo que debemos prestar atención es que la prueba de condición en la instrucción de bucle condicional while siempre es verdadera, por lo que la instrucción de juicio se ejecutará indefinidamente hasta que el valor ingresado por el usuario sea igual a el valor obtenido por el comando expr. Ejecute el comando exit 0 después de ser igual para terminar la ejecución del script

[root@myserver ~]# vim Guess.sh

#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
        read -p "请输入您猜测的价格数目:" INT
        let TIMES++
        if [ $INT -eq $PRICE ] ; then
                echo "恭喜您答对了,实际价格是 $PRICE"
                echo "您总共猜测了 $TIMES 次"
                exit 0
        elif [ $INT -gt $PRICE ] ; then
                echo "太高了!"
        else
                echo "太低了!"
        fi
done

[root@myserver ~]# sh Guess.sh 
商品实际价格为0-999之间,猜猜看是多少?
请输入您猜测的价格数目:600
太高了!
请输入您猜测的价格数目:500
太高了!
请输入您猜测的价格数目:300
太低了!
请输入您猜测的价格数目:450
太低了!
请输入您猜测的价格数目:480
太高了!
请输入您猜测的价格数目:470
太高了!
请输入您猜测的价格数目:460
太高了!
请输入您猜测的价格数目:455    
太低了!
请输入您猜测的价格数目:456
恭喜您答对了,实际价格是 456
您总共猜测了 9 次
[root@myserver ~]# 

Shell usa un bucle while para imprimir un triángulo

[root@myserver ~]# cat example2.sh
#!/bin/sh
i=1
while [ $i -le 10 ] ; do
	j=1
	while [ $j -le $((10-$i)) ] ; do
		echo -n ' '
		j=$(($j+1))
	done

	j=1
	while [ $j -le $((2*$i-1)) ] ; do
		echo -n x
		j=$(($j+1))
	done
	echo
	i=$(($i+1))
done
exit 0
[root@myserver ~]# sh !$
sh example2.sh
         x
        xxx
       xxxxx
      xxxxxxx
     xxxxxxxxx
    xxxxxxxxxxx
   xxxxxxxxxxxxx
  xxxxxxxxxxxxxxx
 xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
[root@myserver ~]# 

declaración de prueba condicional de caso

Si ha estudiado el lenguaje C antes, seguramente sonreirá cuando vea el título de esta sección "¿No es esto una instrucción de cambio?" Sí, la función de la instrucción de prueba condicional de caso y la instrucción de cambio son muy similares. La declaración del caso es hacer coincidir los datos en varios rangos. Si la coincidencia es exitosa, el comando relacionado se ejecuta y la prueba de condición completa finaliza; si los datos no están en el rango listado, el comando predeterminado definido en el asterisco (*) se ejecutará. La estructura gramatical del enunciado del caso se muestra en la Figura 4-22.

Capítulo 4 Editor de Vim y secuencia de comandos de shell.  Capítulo 4 Editor de Vim y secuencia de comandos de shell.

Figura 4-22 La estructura gramatical del enunciado de prueba condicional de caso

Hay una debilidad fatal en el script Guess.sh presentado anteriormente: ¡solo puede aceptar números! Puede intentar ingresar una letra y encontrará que el script se bloquea inmediatamente. La razón es que las letras no se pueden comparar con los números. Por ejemplo, la proposición "es mayor o igual que 3" es completamente incorrecta. Debemos tener ciertas medidas para determinar la entrada del usuario. Cuando la entrada del usuario no es un número, el script puede solicitarlo para evitar fallas.

Al combinar declaraciones de prueba condicionales de casos y comodines en el script (consulte el Capítulo 3 para obtener más detalles), este requisito se puede cumplir por completo. A continuación, escribimos el script Checkkeys.sh, le pedimos al usuario que ingrese un carácter y lo asigne a la variable KEY, y luego le mostramos al usuario si el valor es una letra, número u otro carácter según el valor de la variable KEY.

[root@myserver ~]# cat Checkkeys.sh 
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
	[a-z]|[A-Z])
		echo "您输入的是 字母。"
		;;
	[0-9])
		echo "您输入的是 数字。"
		;;
	*)
		echo "您输入的是 空格、功能键或其他控制字符。"
esac
[root@myserver ~]# sh Checkkeys.sh 
请输入一个字符,并按Enter键确认:3
您输入的是 数字。

Ejercicio

[root@myserver ~]# cat  example3.sh
#!/bin/bash
printf "Input integer number: "
read num
case $num in
    1)
        echo "Monday"
        ;;
    2)
        echo "Tuesday"
        ;;
    3)
        echo "Wednesday"
        ;;
    4)
        echo "Thursday"
        ;;
    5)
        echo "Friday"
        ;;
    6)
        echo "Saturday"
        ;;
    7)
        echo "Sunday"
        ;;
    *)
        echo "error"
esac
[root@myserver ~]# sh !$
sh example3.sh
Input integer number: 5
Friday

Programa de servicio de tareas programadas

Los ingenieros experimentados en operación y mantenimiento de sistemas pueden permitir que Linux habilite o detenga automáticamente ciertos servicios o comandos en un período de tiempo específico sin intervención humana, realizando así la automatización de la operación y el mantenimiento. Aunque ahora tenemos un poderoso programa de secuencia de comandos para realizar algún trabajo de procesamiento por lotes, pero si aún necesita presionar la tecla Intro del teclado para ejecutar este programa de secuencia de comandos a las dos de la mañana todos los días, esto es simplemente demasiado doloroso (por supuesto , también puedes entrenar a tu gatito para que presione la tecla Enter en medio de la noche). A continuación, el Sr. Liu Dun explicará a todos cómo configurar el servicio de tareas programadas del servidor y entregará el trabajo periódico y regular al sistema para que se complete automáticamente.

Las tareas programadas de una sola vez se ejecutan solo una vez y generalmente se utilizan para cumplir con los requisitos de trabajo temporal. Podemos usar el comando at para lograr esta función, simplemente escríbalo en forma de "at time". Si desea ver una tarea programada de una sola vez que se ha configurado pero que aún no se ha ejecutado, puede usar el comando "at -l"; si desea eliminarlo, puede usar el "número de tarea atrm". Cuando se usa el comando at para configurar una tarea programada de una sola vez, el método interactivo se usa de manera predeterminada. Por ejemplo, use el siguiente comando para configurar el sistema para que reinicie automáticamente el servicio del sitio web a las 23:30 esta noche

[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at > 此处请同时按下Ctrl+d来结束编写计划任务
job 3 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root

Antes de implementar oficialmente la tarea planificada, lea el mantra "Orden de minutos, horas, días, meses y semanas" al maestro Liu Dun. Este es el formato de parámetro para configurar tareas utilizando el servicio crond (consulte la Tabla 4-6 para conocer el formato). Cabe señalar que si algunos campos no están configurados, debe usar un asterisco ( * ) para ocupar la posición, como se muestra en la Figura 4-23.Capítulo 4 Editor de Vim y secuencia de comandos de shell.  Capítulo 4 Editor de Vim y secuencia de comandos de shell.

Figura 4-23 Utilice crond para establecer el formato de parámetro de la tarea

También puede consultar el sitio web para ajustar sus propias tareas de sincronización  https://tool.lu/crontab/

Suponga que todos los lunes, miércoles y viernes a las 3:25 de la mañana, necesita usar el comando tar para empaquetar el directorio de datos de un determinado sitio web como un archivo de respaldo. Podemos usar el comando crontab -e para crear una tarea programada. No es necesario utilizar el parámetro -u para crear una tarea programada para usted. Los parámetros específicos para lograr el efecto son los que se muestran en el resultado del comando crontab -l:

[root@myserver ~]# crontab -l
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
[root@myserver ~]# crontab -e

25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot

Identidad y capacidades del usuario

 

El UID del administrador es 0: el usuario administrador del sistema.

El UID del usuario del sistema es 1 ~ 999: para evitar que los piratas informáticos aumenten los derechos a todo el servidor debido a una vulnerabilidad en un determinado programa de servicio, el programa de servicio predeterminado lo ejecutará un usuario del sistema independiente para controlar eficazmente el alcance del daño. El UID de usuario común comienza en 1000: es un usuario creado por el administrador para el trabajo diario

 comando useradd

El comando useradd se usa para crear un nuevo usuario, el formato es "useradd [opción] nombre de usuario".

Puede utilizar el comando useradd para crear una cuenta de usuario. Al usar este comando para crear una cuenta de usuario, el directorio de inicio del usuario predeterminado se almacenará en el directorio / home, el intérprete de Shell predeterminado es / bin / bash, y se creará un grupo de usuarios básico con el mismo nombre que el usuario. defecto

-c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。
-d<登入目录>  指定用户登入时的起始目录。
-D  变更预设值.
-e<有效期限>  指定帐号的有效期限。
-f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。
-g<群组>  指定用户所属的群组。
-G<群组>  指定用户所属的附加群组。
-m  自动建立用户的登入目录。
-M  不要自动建立用户的登入目录。
-n  取消建立以用户名称为名的群组.
-r  建立系统帐号。
-s<shell>   指定用户登入后所使用的shell。
-u<uid>  指定用户ID。

Agregar usuario general

[root@myserver ~]# id yhd
uid=1007(yhd) gid=1007(yhd) groups=1007(yhd)

Agregar un usuario del sistema

[root@myserver ~]# useradd -r yang
[root@myserver ~]# id yang
uid=976(yang) gid=974(yang) groups=974(yang)
[root@myserver ~]# 

Especifique el directorio de inicio para el usuario recién agregado

[root@myserver ~]# useradd -d /home/gaga xiaxia
[root@myserver ~]# tree /home
/home
├── barry
├── carl
├── duke
├── eric
├── gaga
├── george
├── linuxprobe
│   ├── Desktop
│   ├── Documents
│   ├── Downloads
│   ├── Music
│   ├── Pictures
│   ├── Public
│   ├── Templates
│   └── Videos
├── ndy
└── yhd

17 directories, 0 files
[root@myserver ~]# 

 Crea usuarios y crea ID

[root@myserver ~]# useradd caocao -u 544
[root@myserver ~]# id caocao
uid=544(caocao) gid=1011(caocao) groups=1011(caocao)
[root@myserver ~]# 

A continuación, creamos un usuario normal y especificamos la ruta del directorio de inicio, el UID del usuario y el intérprete de Shell. En los siguientes comandos, preste atención a / sbin / nologin, que es un miembro del intérprete de terminal, que es muy diferente del intérprete de Bash. Una vez que el intérprete del usuario está configurado para nologin, significa que el usuario no puede iniciar sesión en el sistema: 

[root@myserver ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin laoliu
[root@myserver ~]# id laoliu
uid=8888(laoliu) gid=8888(laoliu) groups=8888(laoliu)
[root@myserver ~]# 

 

 comando groupadd

El comando groupadd se utiliza para crear un grupo de usuarios, el formato es "groupadd [opción] nombre de grupo".

Para poder asignar los permisos de cada usuario en el sistema de manera más eficiente, a menudo se agregan varios usuarios al mismo grupo en el trabajo, de modo que los permisos se pueden organizar de manera uniforme para un tipo de usuario. Los pasos para crear un grupo de usuarios son muy simples

-g:指定新建工作组的 id;
-r:创建系统工作组,系统工作组的组ID小于 500;
-K:覆盖配置文件 "/ect/login.defs";
-o:允许添加组 ID 号不唯一的工作组。
-f,--force: 如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与 -g 一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)。

 comando usermod

El comando usermod se usa para modificar los atributos de un usuario, y el formato es "usermod [opción] nombre de usuario".

-c<备注>  修改用户帐号的备注文字。
-d登入目录>  修改用户登入时的目录。
-e<有效期限>  修改帐号的有效期限。
-f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
-g<群组>  修改用户所属的群组。
-G<群组>  修改用户所属的附加群组。
-l<帐号名称>  修改用户帐号名称。
-L  锁定用户密码,使密码无效。
-s<shell>  修改用户登入后所使用的shell。
-u<uid>  修改用户ID。
-U  解除密码锁定。

  comando passwd

El comando passwd se usa para modificar la contraseña del usuario, el tiempo de vencimiento, la información de autenticación, etc. El formato es "passwd [opción] [nombre de usuario]"

-l	锁定用户,禁止其登录
-u	解除锁定,允许用户登录
--stdin	允许通过标准输入修改用户密码,如echo "NewPassWord" | passwd --stdin Username
-d	使该用户可用空密码登录系统
-e	强制用户在下次登录时修改密码
-S	显示用户的密码是否被锁定,以及密码所采用的加密算法名称

Modificar la contraseña de usuario común y la contraseña de root

[root@myserver ~]# passwd yhd
Changing password for user yhd.
New password: 
BAD PASSWORD: The password is a palindrome
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@myserver ~]# passwd
Changing password for user root.
New password: 
BAD PASSWORD: The password is a palindrome
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@myserver ~]# 

El comando passwd prohíbe al usuario iniciar sesión en el sistema (bloquear usuario ---> ver el estado del usuario -> desbloquear el usuario ---> ver el estado del usuario)

[root@myserver ~]# passwd -l yhd
Locking password for user yhd.
passwd: Success
[root@myserver ~]# passwd -S yhd
yhd LK 2021-01-15 0 99999 7 -1 (Password locked.)
[root@myserver ~]# passwd -u yhd
Unlocking password for user yhd.
passwd: Success
[root@myserver ~]# passwd -S yhd
yhd PS 2021-01-15 0 99999 7 -1 (Password set, SHA512 crypt.)
[root@myserver ~]# 

 comando userdel

El comando userdel se usa para eliminar un usuario, el formato es "userdel [opción] nombre de usuario"

-f	强制删除用户
-r	同时删除用户及用户家目录
[root@myserver ~]# tail -f /etc/passwd
duke:x:1004:1004::/home/duke:/bin/bash
eric:x:1005:1005::/home/eric:/bin/bash
george:x:1006:1006::/home/george:/bin/bash
yhd:x:1007:1007::/home/yhd:/bin/bash
yang:x:976:974::/home/yang:/bin/bash
gaga:x:1008:1008::/yang/hua:/bin/bash
pipi:x:1009:1009::/yang/gaga:/bin/bash
xiaxia:x:1010:1010::/home/gaga:/bin/bash
caocao:x:544:1011::/home/caocao:/bin/bash
laoliu:x:8888:8888::/home/linux:/sbin/nologin
^C
[root@myserver ~]# userdel -r pipi
[root@myserver ~]# tail -f /etc/passwd
carl:x:1003:1003::/home/carl:/bin/bash
duke:x:1004:1004::/home/duke:/bin/bash
eric:x:1005:1005::/home/eric:/bin/bash
george:x:1006:1006::/home/george:/bin/bash
yhd:x:1007:1007::/home/yhd:/bin/bash
yang:x:976:974::/home/yang:/bin/bash
gaga:x:1008:1008::/yang/hua:/bin/bash
xiaxia:x:1010:1010::/home/gaga:/bin/bash
caocao:x:544:1011::/home/caocao:/bin/bash
laoliu:x:8888:8888::/home/linux:/sbin/nologin
^C
[root@myserver ~]# 

 

Supongo que te gusta

Origin blog.csdn.net/yanghuadong_1992/article/details/112689481
Recomendado
Clasificación