Declaraciones de eco de programación de shell, métodos de cálculo, declaraciones y funciones de bucle

Una declaración de eco

1.1 Echo caracteres de escape de uso común

Echo -n significa salida sin
saltos de línea . Echo -e genera caracteres de escape y envía el contenido de escape a la pantalla

Personajes de escape comunes Paráfrasis
\si Después de escapar, es equivalente a presionar la tecla de retroceso (retroceso), pero solo si hay caracteres después de "\ b"; "\ b" significa eliminar el carácter anterior y "\ b \ b" significa eliminar los dos primeros caracteres.
\C Salida sin salto de línea. Cuando no hay caracteres después de "\ c", el efecto es equivalente a echo -n; pero cuando todavía hay caracteres después de "\ c", los caracteres después de "\ c" no se mostrarán.
\norte Salto de línea, los caracteres que se van a generar comienzan en una nueva línea desde "\ n".
\ v o \ f Salto de línea, pero el comienzo de la nueva línea después del salto de línea está conectado al final de la línea anterior
\ t Medios para insertar pestaña, es decir, pestaña horizontal;
\ r El cursor se mueve al principio de la línea, pero no se ajusta, lo que equivale a usar los caracteres después de "\ r" para sobrescribir los caracteres de la misma longitud antes de "\ r", pero cuando no hay ningún carácter después de "\ r", el que está antes de "\ r" Los caracteres no se sobrescribirán
\\ Medios para insertar "\" en sí

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

1.2 Método de cálculo

Hay 4 métodos de cálculo en el script de shell

1. i=$(expr 12 \* 5)
2. i=$((12*5))
3. i=$[12*5]
4. let i= 12*5

i++相当于i=$[$i+1]
i--相当于i=$[$i-1]
i+=2相当于i=$[$i+2]

Declaración de dos bucles

2.1 para bucle

Cuando utilice una instrucción de bucle for, debe especificar una variable y una lista de valores posibles, y ejecutar la misma secuencia de comandos repetidamente para cada valor diferente hasta que se agote el valor de la variable y se salga por completo del bucle. Aquí, la lista de valores es la condición de ejecución de la instrucción for, que incluye varios objetos con los mismos atributos, que deben especificarse de antemano.

2.1.1 para formato de bucle

Inserte la descripción de la imagen aquí

for 变量名 in 取值列表 
do
	命令序列
done

Ejemplo: agregar usuario y eliminar usuario

#!/bin/bash添加用户
ULIST=$(cat /root/user.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &> /dev/null	//把输出信息丢弃
done
#!/bin/bash删除用户
$ULIST=$(cat /root/user.txt)
for UNAME in $ULIST
do
userdel -r $UNAME
[$? -eq 0] && [echo "已删除用户$UNAME"]
done

2.1.2 Interrupción de bucle (interrumpir, continuar)

De forma predeterminada, romper saltos de un solo bucle, romper 2 saltos de dos bucles, y así sucesivamente, romper n saltos de n bucles.
continuar termina un comando en un bucle, pero no termina por completo el bucle completo

2.1.3 Tres métodos de bucle for

方法1
[root@localhost ~]#for i in {1..10};do echo $i;done		//按序输出1到10
[root@localhost ~]#for i in {1..10..2};do echo $i;done		//输出1到10,步长为2

方法2
[root@localhost ~]#for i in $(seq 1 10);do echo $i;done		//按序输出1到10
[root@localhost ~]#for i in $(seq 1  2 10);do echo $i;done		//输出1到10,步长为2

方法3
[root@localhost ~]#for ((i=1;i<=10;i++));do echo $i;done

2.2 bucle while

Inserte la descripción de la imagen aquí

while 条件测试操作
do
	命令序列
done

Ejemplo: adivina el precio de la mercancía

PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "good's price between 0-999,how much?"
while true
do
	read -p "please input the price you guessed:" INT
	let TIMES++
if [ $INT -eq $PRICE ];then
	echo "You're right.The price is $PRICE"
	echo "You have guessed $TIMES times."
	exit 0
elif [ $INT -gt $PRICE ];then
	echo "Too high!"
else echo "Too low!"
fi
done

2.3 hasta bucle

Pruebe una determinada condición repetidamente y ejecútela repetidamente siempre que la condición no esté establecida
Inserte la descripción de la imagen aquí

until 条件测试操作
do
	命令序列
done

Ejemplo: acumular desde 1

#!/bin/bash
read -p "从1加到几?" num
i=0;s=0
until [ $i -eq $num ]
do
	let "i++";let "s=$s+$i"
done
echo "sum(1...$num)="$s

Tres funciones

Definición de función

[function] 函数名 ()
{
    
    
	命令序列
	[return x]
}

Funciones de llamada

函数名 [参数1] [参数2]

3.1 Valor de retorno de la función

Retorno significa salir de la función y devolver un valor de salida. Puede utilizar la variable para mostrar el valor en el script. Principios de uso del valor: 1 Tome el valor de retorno tan pronto como finalice la función, porque el principio de utilizar la variable para mostrar el valor: 1 Tome el valor de retorno tan pronto como finalice la función ,porque? La cantidad variable que se muestra de forma significativa, el valor hace uso del original es : un número de función de una viga de unión para tomar regresa al valor , porque como ? La variable devuelve solo el último comando ejecutado estado
de salida 2 código de estado de salida debe ser 0-255, más allá Al dividir por 256, toma el resto

db() 
{
    
    
read -p "input:" value
return $[$value * 2]
}
db
echo $?

3.2 Función recursiva

La función recursiva se llama a sí misma. Al analizar la función, puede omitir la llamada a la función y luego analizar la parte.
Ejemplo: atravesar directorios y archivos ejecutables de forma recursiva en variables de entorno

#!/bin/bash
//递归函数部分
file_list() {
    
    
for f in $1/*		// $1/*表示取值列表,读取PATH下目录
do
        if [ -d $f ];then		//对$f进行判断,-d表示是否为目录
        echo "$2$f"
        file_list "$f" " $2"		//调用函数自身,把$f下的所有目录和文件作为取值列表,再次进行判断

        elif [ -x $f ];then		//对$f进行判断,-x表示是否为可执行文件
        echo "$2$f"		//输出空格接该文件
        fi
done
}
//主程序部分
IFS=$IFS':'		//IFS字段分隔符,默认包含空格,换行,制表符,加入':'对冒号也可以识别并进行分隔
for folder in $PATH
do
  echo "$folder:"
  file_list "$folder" " "		//调用函数,加入位参1,2
done

3.3 Creación y llamada de biblioteca de funciones

Ejemplo: biblioteca de funciones de suma, resta, multiplicación y división

创建函数库
[root@localhost ~]#vim myfuncs.sh
jiafa() 
{
    
    
echo $[$1+$2]
}

jianfa()
{
    
    
echo $[$1-$2]
}

chengfa()
{
    
    
echo $[$1*$2]
}

chufa()
{
    
    
if [ $2 -ne 0 ];then
echo $[$1/$2]
else 
echo '$2不能为0'
fi
}

//调用函数库
. myfuncs.sh

value1=10
value2=5
result1=`jiafa $value1 $value2`
result2=`jianfa $value1 $value2`
result3=`chengfa $value1 $value2`
result4=`chufa $value1 $value2`
echo "加法结果为$result1"
echo "减法结果为$result2"
echo "乘法结果为$result3"
echo "除法结果为$result4"

Cuatro para la tabla de multiplicar del noventa y nueve de la salida del lazo, diamante

4.1 Tabla de multiplicar

#!/bin/bash
for ((i=1;i<=9;i++))		//外循环控制行数
do
        for ((j=1;j<=i;j++))		//内循环控制列数
        do
                echo -n -e "$i x $j = $((i * j))\t"
        done
        echo -e "\n"
done

Inserte la descripción de la imagen aquí

4.2 Diamante

#!/bin/bash
#菱形上半部分
for ((i=9;i>=1;i--))            #控制行数
do
  for ((a=1;a<=$i;a++))         #控制第i行第一段输出
  do
  echo -n " "
  done
  for ((b=9;b>=$i;b--))         #控制第i行第二段输出
  do
  echo -n "*"
  done
  for ((c=8;c>=$i;c--))         #控制第i行第三段输出
  do
  echo -n "*"
  done
  echo ""
done

#菱形下半部分
for ((h=2;h<=9;h++))
do
  for ((d=1;d<=$h;d++))
  do
  echo -n " "
  done
 
  for ((e=9;e>=$h;e--))
  do
  echo -n "*"
  done

  for ((f=8;f>=$h;f--))
  do
  echo -n "*"
  done

  echo ""
done

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/cenjeal/article/details/108074560
Recomendado
Clasificación