Shell es un intérprete de línea de comandos que acepta comandos de aplicación / usuario y luego llama al kernel del sistema operativo. Es un lenguaje de programación poderoso, fácil de escribir, fácil de depurar y muy flexible.
Hay seis analizadores de shell proporcionados por Linux:cat /etc/shells
/bin/sh
/bin/bash
, El analizador predeterminado en CentOS es bash/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
Formato de secuencia de comandos
-
El guión
#!/bin/bash
comienza con#!/bin/bash echo "hello world"
-
Ejecute el archivo de script
sh xx.sh
por:bash xx.sh
,,./xx.sh(注意需要.sh具备执行权限[x],chmod 777)
-
Por
touch xx.sh
la creación de archivos de comandos, mediantevim xx.sh
la edición de archivos de comandos.
Variable de sistema
$HOME
, El directorio de inicio del usuario actualmente conectado$PWD
, La ruta del directorio actual$SHELL
, El analizador de shell predeterminado$USER
, El usuario que ha iniciado sesión actualmente
Variable personalizada
- Gramática básica
- Definir variable: variable = valor
- Deshacer variable:
unset 变量名
- Declare variables estáticas:
readonly 变量名
tenga en cuenta que las variables estáticas no se pueden deshacer y el reinicio no es válido. - Reglas de definición de variables: compuestas por letras, números y guiones bajos, y no pueden comenzar con un número. Se recomienda que las variables de entorno estén en mayúscula.
- Sin espacios alrededor del signo igual, requisitos estrictos
- Las variables son de tipo cadena por defecto y las operaciones numéricas no se pueden realizar directamente.
- Si el valor de la variable de espacio, necesita comillas comillas
- Promueva las variables locales en el script a variables globales:
export 变量名
Variable especial
-
$n
-
Descripción de la función: n es un número.
$0
, En nombre del nombre del script ;,$1-$9
en nombre del primero al noveno parámetros; los parámetros por encima del décimo deben${10}
expresarse.touch partmeter.sh
vim partmeter.sh
#!/bin/bash echo "$0 $1 $2"
bash partmeter.sh p1 p2
partmeter.sh p1 p2
-
-
$#
-
Descripción de la función: obtenga el número de todos los parámetros de entrada, que se utilizan a menudo en bucles
#!/bin/bash echo "$#"
bash partmeter.sh p1 p2
2
-
-
$*
-
Descripción de la función: obtenga todos los parámetros en la línea de comando y trate todas las entradas como un todo
#!/bin/bash echo "$*"
bash partmeter.sh p1 p2
p1 p2
-
-
$@
-
Descripción de la función: obtenga todos los parámetros en la línea de comando y trate todos los parámetros de entrada de manera diferente
#!/bin/bash echo "$@"
bash partmeter.sh p1 p2
p1 p2
-
-
$?
- Descripción de la función: el estado de retorno del último comando ejecutado. Si el valor de la variable es 0, prueba que el último comando se ejecutó correctamente; si el valor de la variable es distinto de cero, prueba que hubo un error en la ejecución del comando anterior.
Operador
- Gramática básica
$((运算式))
o$[运算式]
expr
Operación ( debe haber espacios entre operadores )+
,más-
,Menos\*
, Multiplicar/
,excepto%
, Toma el resto- Símbolo de ejecución de la operación: `expr 2 + 3
Juicio condicional
- Gramática básica
[ condition ]
, Tenga en cuenta que debe haber espacios antes y después de la expresión[ test ]
, Si la condición no está vacía, es verdadera; [], si la condición está vacía, es falsa;
- Condiciones de juicio de uso común
=
Comparación de cadenas-lt
, Menos que-le
, Menos que o igual a-eq
,igualgt
, más que elge
, mayor o igual ane
,no igual a-r
, Tiene permiso de lectura-w
, Tener permiso de escritura-x
, Tener permiso para ejecutar-f
, El archivo existe y es un archivo normal.-e
, El archivo existe-d
, El archivo existe y es un directorio
- Juicio de múltiples condiciones
&&
, El siguiente comando se ejecutará solo cuando el comando anterior se ejecute con éxito||
, El siguiente comando se ejecutará cuando el comando anterior falle
Control de procesos
si
-
Sintaxis básica: debe haber un espacio después y debe haber un espacio antes y después de la
if
expresión condicional ;, significa else if; al final.[]
elif
fi
#!/bin/bash if [ condition1 ];then content1 elif [ condition2 ] then content2 fi
caso
-
Sintaxis básica:
case $变量名 in value)
formato,;;
fin de caso, similar a romper;*)
representa la rama predeterminada;esac
fin;#!/bin/bash case $1 in 1) content1 ;; 2) content2 ;; 3) content3 ;; *) content4 ;; esac
por
-
Gramática básica 1:
for((初始值;循环控制条件;变量变化))
formato;do
cuerpo del método;done
fin; acumulación específica de 1-100 suma:#!/bin/bash s=0 for((i=1;i<=100;i++)) do s=$[$s+$i] done echo $s
-
Sintaxis básica 2:
for 变量 in value1 value2 value3
formato;$@
cada parámetro de entrada se procesa por separado y$*
el parámetro de entrada se procesa como un todo#!/bin.bash for i in "$*" do echo "ceshi * $*" done for j in "$@" do echo "ceshi @ $@" done
bash ceshi.sh zs ls
El resultado de salida es:
ceshi * zs ls
ceshi @ zs
ceshi @ ls
tiempo
-
Gramática básica:
while [ condition ]
formato;do
cuerpo del método;done
fin; la suma de la acumulación concreta 1-100:#!/bin/bash s=0 i=0 while [ $i -le 100] do s=$[$s+$i] i=$[$i+1] done
Leer para leer la entrada de la consola
-
Sintaxis básica:
read(选项)(参数)
- Opciones
-p
, Especifique la solicitud al leer el valor-t
, Especifique el tiempo de espera al leer el valor (segundos)
- parámetro
- Variable: especifique el nombre de la variable para leer el valor
- Opciones
-
Ejemplo: ingrese el nombre en la consola en siete segundos
#!/bin/bash read -t 7 -p "input your name in 7 seconds" name echo $name
función
Función del sistema
basename [string/pathname][suffix]
, Intercepta el nombre del archivo en la ruta especificadadirname 文件绝对路径
, Extraiga la ruta del archivo del nombre de archivo dado que contiene la ruta absoluta
Función personalizada
-
Gramática básica
// 声明函数 function funname[()]{ action; [return int;] } funname // 执行函数
Herramienta Shell
comando de corte
-
Corte bytes, caracteres y campos de cada línea del archivo y genere estos bytes, caracteres y campos.
-
Uso básico
-
cut [选项参数] filename
-
Parámetro de opción
-f
, Número de columna, qué columna extraer-d
, Separador, divida la columna de acuerdo con el separador especificado, el separador predeterminado es una pestaña\t
-
Ejemplo: use el espacio como separador para cortar la segunda columna del contenido del archivo y generar el siguiente contenido
cut -d " " -f 2- cut.txt
-
y
-
Editor de transmisiones, que procesa una línea de contenido a la vez. Al procesar el contenido de la línea, almacene el contenido de la línea actual en un área de búfer temporal llamada "espacio de modo", luego use el comando sed para procesar el contenido en el búfer y envíe el contenido después de que se complete el procesamiento. Luego procesa la siguiente línea hasta el final del texto.
-
Uso básico
-
sed [选项参数] "命令功能" filename
-
Parámetro de opción
-e
, Edite directamente la acción de sed en el modo de columna especificado
-
Función de comando (de uso común)
a
, Agregard
,Eliminars
, Encontrar y reemplazar
-
Por ejemplo:
-
Agregue contenido en la segunda línea del archivo: agregue contenido
sed "2a add contend" filename
-
Elimina la línea que contiene wo en el archivo.
sed "/wo/d" filename
-
Reemplace wo en el archivo con ni
sed "s/wo/ni/g" filename
,g
Que significa reemplazo global -
Elimine la segunda línea del archivo y reemplace wo en el archivo con ni
sed -e "2d" -e "s/wo/ni/g" filename
-
-
awk
-
La herramienta de análisis de texto lee el archivo línea por línea. De forma predeterminada, cada línea se corta con un espacio como separador y la parte cortada se puede analizar y procesar.
-
El uso básico:
awk [选项参数] 'pattern1{action1} pattern2{action2} ...' filename
;pattern
; coincide con la expresión regularaction
contenidos comando correspondiente de acuerdo con la ejecución.-
Parámetro de opción
-F
, Especifique el separador del archivo de entrada-v
, Copiar una variable definida por el usuario
-
Variables integradas
FILENAME
,nombre del archivoNR
, El número de registros leídosNF
, La cantidad de dominios en el registro de navegación (después de cortar, la cantidad de columnas)
-
Ejemplo: busque todas las líneas en el archivo que comiencen con la raíz y genere la séptima columna de la línea
awk -F : '/^root/{print $7}' filename
-
clasificar
-
Los archivos se clasifican y emiten de acuerdo con el estándar de resultados de clasificación
-
Uso básico
-
sort(选项)(参数)
-
Opciones
-
-n
, Ordenado por valor numérico -
-r
, Ordenar en orden inverso -
-t
, Establezca el carácter separador utilizado para ordenar -
-k
, Especifique la columna a ordenar -
parámetro
- Especifique la lista de archivos que se ordenarán
-
Ejemplo: los archivos se dividen por dos puntos y la tercera columna se ordena en orden inverso
sort -t : -nrk 3 filename
-
-