2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
if command
then
command
fi
if
Lausunnot eroavat muista ohjelmointikielistä, bashistaif
Lausunto tuleeJuokse suoraanif
Seuraavat komennot
fi
Lopeta logiikkaohjausif command
then
command
else
command
fi
if command
then
command
elif command
then
command
fi
if-else
haaracase "变量" 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
Yleisesti käytetty syntaksi ehdolliseen testaukseen
Yleisesti käytetyt merkkijonotestioperaattorit
numeerinen vertailu
Loogiset operaattorit
Jokaisen komennon vertailutaulukko
test
Komennon lyhin määritelmä voisi ollaArvioi lauseke
$?
arvoTietoja tiedostonimestätyypin tunnistus(olemassa tai ei), kuten:test -e filename
parametri | merkitys |
---|---|
-e | Onko tiedostonimi olemassa? |
-f | Onko tiedoston nimi tiedosto (file ) |
-d | Onko tiedoston nimi hakemisto (directory ) |
-b | Onko tiedoston nimiblock device laite |
-c | Onko tiedoston nimi acharacter device laite |
-S | Onko tiedoston nimi aSocket asiakirja |
-p | Onko tiedoston nimi FIFO (pino) -tiedosto |
-L | Onko tiedoston nimi yhteystiedosto |
tiedostoistaLuvan havaitseminen,Kuten:test -r filename
parametri | merkitys |
---|---|
-r | Onko tiedostonimelläluettavissaominaisuuksia |
-w | Onko tiedostonimelläkirjoitettavaominaisuuksia |
-x | Onko tiedostonimelläSuoritettavaominaisuuksia |
-u | Onko tiedostonimelläSUIDominaisuuksia |
-g | Onko tiedostonimelläSGIDominaisuuksia |
-k | Onko tiedostonimelläTahmea palaominaisuuksia |
-s | Onko tiedoston nimiei-tyhjä tiedosto |
noinKahden tiedoston vertailu,Kuten:test file1 -nt file2
parametri | merkitys |
---|---|
-nt | (uudempi kuin), tuomarifile1 Onko parempi kuinfile2 Uusi |
-ot | (vanhempi kuin), tuomarifile1 Onko parempi kuinfile2 vanha |
-ef | tuomarifile1 jafile2 Olipa kyseessä sama tiedosto, sitä voidaan käyttääkova linkkituomion perusteellaTärkein merkitys on määrittää, osoittavatko kaksi tiedostoa samaan inode |
noinKahden kokonaisluvun määrittäminen,Kuten:test num1 -eq num2
parametri | merkitys |
---|---|
-eq | Kaksi numeroa ovat yhtä suuret |
-ne | Kaksi numeroa eivät ole samat |
-gt | num1 enemmän kuinnum2 |
-lt | num1 vähemmän kuinnum2 |
-ge | num1 suurempi tai yhtä suuri kuinnum2 |
-le | num1 Pienempi kuin tai yhtä suuri kuinnum2 |
päättäväisyysmerkkijonotiedot
parametri | merkitys |
---|---|
-z | Jos se on tyhjä merkkijono, palautatrue |
-n | Jos se ei ole tyhjä merkkijono, niintrue |
= | str1 == str2 , sitten takaisintrue |
!= | str1 != str2 , sitten takaisintrue |
Useita ehdollisia tuomioita,Kuten:test -r filename -a -x filename
parametri | merkitys |
---|---|
-a | (ja) Molemmat tilanteet todetaan samanaikaisesti |
-o | (tai) jompikumpi näistä kahdesta tilanteesta on totta |
! | loogista kieltämistä |
[]
test
ja[]
Vaikutus on sama[]
Kaksi symbolia on erotettava toisistaan välilyönnillä vasemmalla ja oikealla[ "a" = "b" ]
> <
Pitää kirjoittaa muodossa> /<
paeta[]
keskipitkä merkkijono tai${}
Käytä muuttujia niin paljon kuin mahdollista""
Suljetaan lainausmerkeillä, jotta vältetään määrittelemättömät viittaukset arvoihin[ -n "$filename" ]
[]
Voidaan käyttää sisällä-a -o
Suorita loogisia operaatioita, ei tueta&& ||
[]
on bash sisäänrakennettu komento[[]]
Kaksi symbolia on erotettava toisistaan välilyönnillä vasemmalla ja oikealla[[ "a" = "b" ]]
> <
, ei tarvitse paeta[[]]
keskipitkä merkkijono tai${}
Käytä muuttujia niin paljon kuin mahdollista""
lainausmerkkien sisällä ""
Jos se on lainausmerkeissä, kuvion ja metamerkkien täsmäys suoritetaan.[[]]
Voidaan käyttää sisäisesti&& ||
Suorita loogisia operaatioita[[]]
Se on bashin avainsana[[]]
Muut käyttötarkoitukset ovat samat kuin[]
Sama#!/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
kielioppi: täällätest command
jaif-else
Lausekemuoto on sama ja voit käyttää mitä tahansa bash-komentoa
while
/test command
Poistumistilakoodin tulee muuttua silmukan komennon kanssa. Muussa tapauksessa silmukka jatkuu, jos tilakoodi ei muutu.while test command
do
commands
done
while
TilausUseita testikomentoja voidaan kirjoittaa
var1=10
while echo $var1
[ $var1 -ge 0 ]
do
echo "This is inside the loop"
var1=$[ $var1 -1 ]
done
until
jawhile
Joopäinvastainen tarkoitus,until
Komento edellyttää, että määrität aTestaa komennot, jotka palauttavat nollasta poikkeavat poistumiskoodit
until test commands
do
other commands
done
until
myösTukee useita testikomentoja, vain viimeinen määrittää, suorittaako bash muita komentojauntil echo $var1
[ $var1 -eq 0 ]
do
echo "Inside the loop:$var1"
var1=$[ $var1 - 25 ]
done
break
Lopettaa automaattisesti suurimman osan muistisilmukasta, jossa se onn
Ilmaisee silmukan tason, josta poistutaan. Oletusarvo on 1 ja seuraava taso on 2.break n
for (( a = 1;a<10;a++ ))
do
echo "The number is $a"
done > test.txt
echo "Finished"