Comenzando con los conceptos básicos de shell bash, la única forma de aprender Linux

de entrada y salida

echoIndica para imprimir una cadena; readIndica para obtener la entrada del usuario; $se usa para referirse a variables.

# test1.sh  bash中用#进行单行注释
echo "input your name:"
read user_name
echo "hello $user_name"

El resultado de su funcionamiento es

$ bash test1.sh 
input your name:    #为echo打印
laser               #为用户输入
hello laser

Asignación y cálculo

bashNo hay nada especial en los operadores de

operador ilustrar
+, -, ×, /_% Suma, resta, multiplicación y división, resto; +=formas de apoyo
**, &&,|| Poder, relación y, o

Sin embargo, a diferencia de los lenguajes de programación comunes, las bashasignaciones y los cálculos matemáticos en (()). Y dentro de los corchetes dobles, no tienes que usar $para referirte a la variable. Pero fuera de los corchetes dobles, al asignar un valor a una variable, debe usar$

$ ((a=5+3))
$ b = $((a+3))        #双括号内是数值,需要用$
#一般在C语言中合法的表达式均可用于双括号内
$ echo $((a>b ? a:b))
11

juicio condicional

bash, el juicio condicional [[]]se realiza pasando. P.ej

$ [[ 3 -eq 5 ]] #3是否等于5
$ echo $?       #$? 表示上次计算的结果
1               #在bash中,0表示真,其他表示假

Tenga en cuenta que en bash, 0significa verdadero. Los operadores de juicio condicional admitidos son los siguientes

Comparación de enteros -eq -ne -gt -lt -ge -le
truecondición igual distancia izquierda>derecha Izquierda <derecha izquierda >= derecha Izquierda <= derecha
comparación de cadenas > < == !=,<> =~
truecondición izquierda>derecha Izquierda <derecha igual distancia La izquierda coincide con la derecha (regex)

Entre ellos, la comparación de cadenas es el orden lexicográfico.

comparación de archivos -nt -ot -ef
truecondición La izquierda es más nueva que la derecha la izquierda es mas antigua que la derecha izquierda y derecha lo mismo
trueCondición 2 La izquierda existe, la derecha no existe La izquierda no existe, la derecha existe

Además, bash también admite el juicio de atributos de archivos, lo cual es necesario en lo que respecta al sistema operativo. Sin embargo, en lo que a lenguajes de programación se refiere, esta función para la interacción de archivos es un contenido avanzado, por lo que se coloca más adelante.

Ahora la clave es aprender la estructura de control del juicio condicional, bashcomo otros lenguajes, adopta la ifpalabra clave como palabra clave y la palabra clave ficomo final de la estructura condicional. La distancia es la siguiente

$ ((a=15))
$ ((b=20))
$ if [[ a -le b ]]; then
> echo $a   #如果a<b则打印a
> else
> echo $b   #否则打印b
> fi
15

Además de usar [[]], también puede pasar testo [], pero el alcance de la aplicación es limitado y los principiantes solo necesitan dominar [[]].

función

En los lenguajes de programación, la importancia de las funciones es evidente. En bash, crear una función también es muy simple, el formato básico es

func(){
    
    
    # 传入参数用$1...$9表示
    return ...  #如果无返回值则不用return
}

que funcse puede reemplazar con el nombre de la función. En bash, proporciona algunos $parámetros integrados relacionados con la función, $1~ $9puede representar los parámetros entrantes, cuando la posición del parámetro es mayor que 10, debe escribirse de ${10}forma similar.

Como se ha explicado la expresión de juicio, a continuación se puede implementar una función factorial recursiva.

#!/bin/bash
fac(){
    
    
    x=$1
    if [[ ${x} -eq 1 ]];then
        echo "1"
    else
        echo "$[$x * $(fac $[$x-1])]"
    fi
}

res=$(fac $1)
echo "$1的阶乘是:${res}"

$Las expresiones también se utilizan de la siguiente manera

$# Número de parámetros
$* mostrar todos los parámetros
$@ Mostrar todos los parámetros pero usar comillas y devolver cada parámetro entre comillas
$$ El número de identificación del proceso actual del script que se está ejecutando.
$! Número de ID del último proceso que se ejecuta en segundo plano
$- Muestra las opciones actuales utilizadas por el shell, que tiene la misma función que el comando set.
$? Estado de salida del último comando, 0 significa que no hay error.

en bucle

En bash if else, hay otras caseopciones disponibles para la selección condicional además de . Pero para los principiantes, no hay necesidad de ser codiciosos, por caselo que se reduce la prioridad del aprendizaje.

Lo mismo ocurre con los bucles. Aunque se admiten estructuras como , , , etc. for, por el momento whilese dejarán untilatrás. Aquí, solo necesitamos explicar los forbucles de estilo C más comprensibles.

Su estructura completa esfor do done

for ((i = 0 ; i <= 1000 ; i++)); do
  echo "Counter: $i"
done

Entre ellos, (())también puede entenderse como la asignación y cálculo matemático mencionado anteriormente. Y, como era de esperar, bashZhong también admite continuey break, el primero puede omitir el bucle actual, el segundo puede saltar fuera del bucle.

En bash, también se do...doneutilizan otras estructuras de bucle para especificar regiones de bucle. Y cuando las palabras clave como doy forotras palabras clave están en la misma línea, deben estar ;separadas por un punto y coma.

Array y su recorrido

En bash, los paréntesis se pueden usar para construir arreglos además de crear shells locales.

$ arr=(A B "C" D)
$ echo $arr
A
$ echo ${arr[1]}
B
$ echo ${arr[*]}    #获取全部数组元素
A B C D

A través de la for...indeclaración, puede atravesar la matriz, pero debe tenerse en cuenta que la matriz debe pasar @así cuando se atraviesa.

$ for var in "${arr[@]}"
> do
> echo $var
> done
A
B
C
D

Además, forexisten soluciones transversales más convenientes para bucles.

$ for i in 1 2 3 4 5
> do
> echo $i
> done
1
2
3
4
5

otras declaraciones de control

whiley untilson sintácticamente idénticos, pero semánticamente todo lo contrario. El primero se ejecuta hasta que se falsealcanza la condición y el segundo se ejecuta hasta que se truealcanza la condición.

a=0
# 下面的例子将打印从0到10的自然数
until [[ $a -gt 10 ]]
    do
    echo $a
    a=$((a+1))
    done

Finalmente, también se proporciona bashuna instrucción de selección múltiple case...esac, y su lógica de aplicación es la switch casemisma que la de , el ejemplo específico es el siguiente

echo 'input a number:'
read num
case $num in
    1)  echo 'you input 1'
    ;;
    2)  echo 'you input 2'
    ;;
    *)  echo 'you input others'
    ;;
esac

Entre ellos, 1), 2) representan la situación que se produce, lo que ;;equivale breaka saltar case.

En este punto, dominas la bashgramática básica como idioma.

Supongo que te gusta

Origin blog.csdn.net/m0_37816922/article/details/124004496
Recomendado
Clasificación