Directorio de artículos
de entrada y salida
echo
Indica para imprimir una cadena; read
Indica 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
bash
No 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 bash
asignaciones 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, 0
significa verdadero. Los operadores de juicio condicional admitidos son los siguientes
Comparación de enteros | -eq |
-ne |
-gt |
-lt |
-ge |
-le |
---|---|---|---|---|---|---|
true condición |
igual | distancia | izquierda>derecha | Izquierda <derecha | izquierda >= derecha | Izquierda <= derecha |
comparación de cadenas | > |
< |
== |
!= ,<> |
=~ |
---|---|---|---|---|---|
true condició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 |
---|---|---|---|
true condición |
La izquierda es más nueva que la derecha | la izquierda es mas antigua que la derecha | izquierda y derecha lo mismo |
true Condició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, bash
como otros lenguajes, adopta la if
palabra clave como palabra clave y la palabra clave fi
como 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 test
o []
, 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 func
se puede reemplazar con el nombre de la función. En bash
, proporciona algunos $
parámetros integrados relacionados con la función, $1
~ $9
puede 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 case
opciones disponibles para la selección condicional además de . Pero para los principiantes, no hay necesidad de ser codiciosos, por case
lo que se reduce la prioridad del aprendizaje.
Lo mismo ocurre con los bucles. Aunque se admiten estructuras como , , , etc. for
, por el momento while
se dejarán until
atrás. Aquí, solo necesitamos explicar los for
bucles 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, bash
Zhong también admite continue
y break
, el primero puede omitir el bucle actual, el segundo puede saltar fuera del bucle.
En bash
, también se do...done
utilizan otras estructuras de bucle para especificar regiones de bucle. Y cuando las palabras clave como do
y for
otras 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...in
declaració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, for
existen 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
while
y until
son sintácticamente idénticos, pero semánticamente todo lo contrario. El primero se ejecuta hasta que se false
alcanza la condición y el segundo se ejecuta hasta que se true
alcanza la condición.
a=0
# 下面的例子将打印从0到10的自然数
until [[ $a -gt 10 ]]
do
echo $a
a=$((a+1))
done
Finalmente, también se proporciona bash
una instrucción de selección múltiple case...esac
, y su lógica de aplicación es la switch case
misma 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 break
a saltar case
.
En este punto, dominas la bash
gramática básica como idioma.