Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
if command
then
command
fi
if
Las declaraciones son diferentes de otros lenguajes de programación, bashif
La declaración seráEjecutar directamenteif
Los siguientes comandos
fi
Control lógico finalif command
then
command
else
command
fi
if command
then
command
elif command
then
command
fi
if-else
ramacase "变量" in
值1)
命令
;;
值2)
命令2
;;
*)
命令
#!/bin/bash
FreeMem=`free -m | awk 'NR==2 {print $NF}'`
CHARS="Current memory is $FreeMem"
if [ "$FreeMem" -lt 16000 ]
then
echo $CHARS
echo "内存不足,抓紧维护服务器!"
fi
#!/bin/bash
a=$1
b=$2
if [ $a -lt $b ]
then
echo "Yes, $a less than $b"
exit 0
fi
if [ $a -eq $b ]
then
echo "Yes, $a equal $b"
exit 0
fi
if [ $a -gt $b ]
then
echo "Yes, $a greater than $b"
exit 0
fi
#!/bin/bash
a=$1
b=$2
if [ $a -lt $b ]
then
echo "Yes, $a less than $b"
exit 0
elif [ $a -eq $b ]
then
echo "Yes, $a equal $b"
exit 0
else [ $a -gt $b ]
echo "Yes, $a greater than $b"
exit 0
fi
#!/bin/bash
if [ `netstat -tunlp | grep mysql | wc -l` -ge "1" ]
then
echo "MySQL is running"
else
echo "MySQL is stopped"
# systemctl start mysql.service
fi
#!/bin/bash
if [ "$#" -ne 1 ]
then
echo "Usage: $0 {start|stop|restart}"
exit 1
fi
if [ "$1" = "start" ]
then
/usr/bin/rsync --daemon
sleep 2
if [ `netstat -tunlp | grep rsync | wc -l` -ge 1 ]
then
echo "Rsync is started"
exit 0
fi
elif [ "$1" = "stop" ]
then
killall rsync &>/dev/null
sleep 2
if [ `netstat -tunlp | grep rsync | wc -l` -eq 0 ]
then
echo "Rsync is stopped"
exit 0
fi
elif [ "$1" = "restart" ]
then
kill rsync
sleep 1
killpro=`netstat -tunlp | grep rsync | wc -l`
/usr/bin/rsync --daemon
sleep 1
startpro=`netstat -tunlp | grep rsync | wc -l`
if [ "$killpro" -eq 0 -a "$startpro" -ge 1 ]
then
echo "Rsync is restarted"
exit 0
fi
else
echo "Usage: $0 {start|stop|restart}"
exit 1
fi
Sintaxis comúnmente utilizada para pruebas condicionales
Operadores de prueba de cadenas de uso común
comparación numérica
Operadores logicos
Tabla comparativa de cada comando
test
La definición más corta de un comando podría serEvaluar una expresión
$?
valorAcerca de un nombre de archivodetección de tipo(existen o no), tales como:test -e filename
parámetro | significado |
---|---|
-e | ¿Existe el nombre del archivo? |
-f | ¿El nombre del archivo es un archivo (file ) |
-d | Si el nombre del archivo es un directorio (directory ) |
-b | es el nombre del archivoblock device dispositivo |
-c | ¿El nombre del archivo es uncharacter device dispositivo |
-S | ¿El nombre del archivo es unSocket documento |
-p | Si el nombre del archivo es un archivo FIFO (pila) |
-L | Si el nombre del archivo es un archivo de conexión |
sobre archivosDetección de permisos,como:test -r filename
parámetro | significado |
---|---|
-r | ¿El nombre del archivo tienelegiblepropiedades |
-w | ¿El nombre del archivo tienegrabablepropiedades |
-x | ¿El nombre del archivo tieneEjecutablepropiedades |
-u | ¿El nombre del archivo tieneSuicidiopropiedades |
-g | ¿El nombre del archivo tieneSGIDpropiedades |
-k | ¿El nombre del archivo tieneUn poco pegajosopropiedades |
-s | es el nombre del archivoarchivo que no está en blanco |
acerca deComparación entre dos archivos,como:test file1 -nt file2
parámetro | significado |
---|---|
-nt | (más nuevo que), juezfile1 ¿Es mejor quefile2 nuevo |
-ot | (mayor que), juezfile1 ¿Es mejor quefile2 viejo |
-ef | juezfile1 yfile2 Si es el mismo archivo, se puede utilizar enenlace duroen el juicio deEl significado principal es determinar si los dos archivos apuntan al mismo inode |
acerca deDeterminar entre dos números enteros,como:test num1 -eq num2
parámetro | significado |
---|---|
-eq | dos numeros son iguales |
-ne | Dos números no son iguales |
-gt | num1 más que elnum2 |
-lt | num1 menos quenum2 |
-ge | num1 mayor o igual anum2 |
-le | num1 Menos que o igual anum2 |
determinacióndatos de cadena
parámetro | significado |
---|---|
-z | Si es una cadena vacía, devuelvetrue |
-n | Si no es una cadena vacía, entoncestrue |
= | str1 == str2 , luego regresartrue |
!= | str1 != str2 , luego regresartrue |
Juicio condicional múltiple,como:test -r filename -a -x filename
parámetro | significado |
---|---|
-a | (y) Ambas situaciones se establecen al mismo tiempo |
-o | (o) cualquiera de las dos situaciones es cierta |
! | negación lógica |
[]
test
y[]
El efecto es el mismo[]
Dos símbolos deben estar separados por espacios a la izquierda y a la derecha.[ "a" = "b" ]
> <
Necesita escribirse como> /<
escapar[]
hilo mediano o${}
Utilice variables tanto como sea posible.""
Entre comillas dobles para evitar referencias indefinidas a valores[ -n "$filename" ]
[]
Se puede utilizar en-a -o
Realizar operaciones lógicas, no admitidas.&& ||
[]
es un comando integrado de bash[[]]
Dos símbolos deben estar separados por espacios a la izquierda y a la derecha.[[ "a" = "b" ]]
> <
, no hay necesidad de escapar[[]]
hilo mediano o${}
Utilice variables tanto como sea posible.""
encerrado entre comillas dobles ""
Si se incluye entre comillas dobles, se realizará la coincidencia de patrones y metacaracteres.[[]]
Se puede utilizar internamente&& ||
Realizar operaciones lógicas[[]]
Es la palabra clave de bash.[[]]
Otros usos son los mismos que[]
Mismo#!/bin/bash
read -p "Pls input a char:> " var1
[ "${var1}" -eq 1 ] && {
echo ${var1}
exit 0
}
[ "$var1" -eq 2 ] && {
echo $var1
exit 0
}
[ "$var1" -ne "1" -a "$var1" -ne "2" ] && {
echo "Script Error"
exit 1
}
#!/bin/bash
path=/scripts
[ ! -d "$path" ] && mkdir -p scripts
cat << END
1.[install lamp]
2.[install inmp]
3.[exit]
END
read -p "Pls input your choice:> " num
# 判断输入是否合法
[[ ! $num =~ [1-3] ]] && {
echo "The num you input must be in {1|2|3}"
echo "Input Error"
exit 1
}
[ $num -eq 1 ] && {
echo "start installing lamp...waiting..."
sleep 2
# 如果该脚本没权限
[ ! -x "$path/lamp.sh" ] || {
echo "The file does not exit or can't be exec"
exit 2
}
# 安装脚本
source ${path}/lamp.sh
exit $?
}
[ $num -eq 2 ] && {
echo "start installing lnmp...waiting..."
sleep 2
[ ! -x "$path/lnmp.sh" ] || {
echo "The file does not exit or can't be exec"
exit 3
}
source ${path}/lnmp.sh
exit $?
}
[ $num -eq 3 ] && {
echo "Bye~"
exit 4
}
for var in list
do
commands
done
for (( i=1;i<=10;i++ ))
do
echo "The next number is $i"
done
gramática: aquítest command
yif-else
El formato de la declaración es el mismo y puedes usar cualquier comando bash.
while
detest command
El código de estado de salida debe cambiar con el comando en el bucle. De lo contrario, si el código de estado no cambia, el bucle continuará continuamente.while test command
do
commands
done
while
OrdenSe pueden escribir múltiples comandos de prueba.
var1=10
while echo $var1
[ $var1 -ge 0 ]
do
echo "This is inside the loop"
var1=$[ $var1 -1 ]
done
until
ywhile
Sísignificado opuesto,until
El comando requiere que especifique unComandos de prueba que devuelven códigos de salida distintos de cero
until test commands
do
other commands
done
until
tambiénAdmite múltiples comandos de prueba, solo el último determina si bash ejecuta otros comandosuntil echo $var1
[ $var1 -eq 0 ]
do
echo "Inside the loop:$var1"
var1=$[ $var1 - 25 ]
done
break
Terminará automáticamente el bucle con mayor cantidad de memoria en el que se encuentre.n
Indica el nivel de bucle del que saltar. El valor predeterminado es 1 y el siguiente nivel es 2.break n
for (( a = 1;a<10;a++ ))
do
echo "The number is $a"
done > test.txt
echo "Finished"