minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
if command
then
command
fi
if
As instruções são diferentes de outras linguagens de programação, bash'sif
Declaração iráExecute diretamenteif
Os seguintes comandos
fi
Finalizar controle lógicoif command
then
command
else
command
fi
if command
then
command
elif command
then
command
fi
if-else
filialcase "变量" 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
Sintaxe comumente usada para testes condicionais
Operadores de teste de string comumente usados
comparação numérica
Operadores lógicos
Tabela de comparação de cada comando
test
A definição mais curta de um comando pode serAvaliar uma expressão
$?
valorSobre um nome de arquivodetecção de tipo(existem ou não), tais como:test -e filename
parâmetro | significado |
---|---|
-e | O nome do arquivo existe? |
-f | O nome do arquivo é um arquivo (file ) |
-d | Se o nome do arquivo é um diretório (directory ) |
-b | É o nome do arquivoblock device dispositivo |
-c | O nome do arquivo é umcharacter device dispositivo |
-S | O nome do arquivo é umSocket documento |
-p | Se o nome do arquivo é um arquivo FIFO (pilha) |
-L | Se o nome do arquivo é um arquivo de conexão |
sobre arquivosDetecção de permissão,como:test -r filename
parâmetro | significado |
---|---|
-r | O nome do arquivo temlegívelpropriedades |
-w | O nome do arquivo temgravávelpropriedades |
-x | O nome do arquivo temExecutávelpropriedades |
-u | O nome do arquivo temSUIDpropriedades |
-g | O nome do arquivo temSGIDpropriedades |
-k | O nome do arquivo tempedaço pegajosopropriedades |
-s | É o nome do arquivoarquivo não vazio |
sobreComparação entre dois arquivos,como:test file1 -nt file2
parâmetro | significado |
---|---|
-nt | (mais recente que), juizfile1 É melhor do quefile2 novo |
-ot | (mais velho que), juizfile1 É melhor do quefile2 velho |
-ef | juizfile1 efile2 Quer seja o mesmo arquivo, ele pode ser usado emlink físicosobre o julgamento deO principal significado é determinar se os dois arquivos apontam para o mesmo inode |
sobreDeterminando entre dois inteiros,como:test num1 -eq num2
parâmetro | significado |
---|---|
-eq | Dois números são iguais |
-ne | Dois números não são iguais |
-gt | num1 mais do que onum2 |
-lt | num1 menor quenum2 |
-ge | num1 maior ou igual anum2 |
-le | num1 menos que ou igual anum2 |
determinaçãodados de string
parâmetro | significado |
---|---|
-z | Se for uma string vazia, retornetrue |
-n | Se não for uma string vazia, entãotrue |
= | str1 == str2 , então retornetrue |
!= | str1 != str2 , então retornetrue |
Julgamento condicional múltiplo,como:test -r filename -a -x filename
parâmetro | significado |
---|---|
-a | (e) Ambas as situações são estabelecidas ao mesmo tempo |
-o | (ou) qualquer uma das duas situações é verdadeira |
! | negação lógica |
[]
test
e[]
o efeito é o mesmo[]
Dois símbolos devem ser separados por espaços à esquerda e à direita[ "a" = "b" ]
> <
Precisa ser escrito como> /<
escapar[]
corda média ou${}
Use variáveis tanto quanto possível""
Colocado entre aspas duplas para evitar referências indefinidas a valores[ -n "$filename" ]
[]
Pode ser usado em-a -o
Execute operações lógicas, não suportadas&& ||
[]
é um comando interno do bash[[]]
Dois símbolos devem ser separados por espaços à esquerda e à direita[[ "a" = "b" ]]
> <
, não há necessidade de escapar[[]]
corda média ou${}
Use variáveis tanto quanto possível""
entre aspas duplas ""
Se estiver entre aspas duplas, a correspondência de padrões e metacaracteres será realizada.[[]]
Pode ser usado internamente&& ||
Execute operações lógicas[[]]
É a palavra-chave do bash[[]]
Outros usos são iguais aos[]
Mesmo#!/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: aquitest command
eif-else
O formato da instrução é o mesmo e você pode usar qualquer comando bash
while
detest command
O código de status de saída deve mudar com o comando no loop. Caso contrário, se o código de status não mudar, o loop continuará continuamente.while test command
do
commands
done
while
OrdemVários comandos de teste podem ser escritos
var1=10
while echo $var1
[ $var1 -ge 0 ]
do
echo "This is inside the loop"
var1=$[ $var1 -1 ]
done
until
ewhile
simsignificado oposto,until
O comando requer que você especifique umComandos de teste que retornam códigos de saída diferentes de zero
until test commands
do
other commands
done
until
tambémSuporta vários comandos de teste, apenas o último determina se o bash executa outros comandosuntil echo $var1
[ $var1 -eq 0 ]
do
echo "Inside the loop:$var1"
var1=$[ $var1 - 25 ]
done
break
Terminará automaticamente o maior loop de memória em que estivern
Indica o nível do loop do qual sair. O padrão é 1 e o próximo nível é 2.break n
for (( a = 1;a<10;a++ ))
do
echo "The number is $a"
done > test.txt
echo "Finished"