2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
if command
then
command
fi
if
Anweisungen unterscheiden sich von anderen Programmiersprachen, Bashif
Erklärung wirdDirekt ausführenif
Die folgenden Befehle
fi
Logiksteuerung beendenif command
then
command
else
command
fi
if command
then
command
elif command
then
command
fi
if-else
Zweigcase "变量" 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
Häufig verwendete Syntax für bedingte Tests
Häufig verwendete String-Testoperatoren
Zahlenvergleich
Logische Operatoren
Vergleichstabelle jedes Befehls
test
Die kürzeste Definition eines Befehls könnte seinBewerten Sie einen Ausdruck
$?
WertÜber einen DateinamenTyperkennung(existieren oder nicht), wie zum Beispiel:test -e filename
Parameter | Bedeutung |
---|---|
-e | Existiert der Dateiname? |
-f | Ist der Dateiname eine Datei (file ) |
-d | Ob der Dateiname ein Verzeichnis ist (directory ) |
-b | Ist der Dateinameblock device Gerät |
-c | Ist der Dateiname acharacter device Gerät |
-S | Ist der Dateiname aSocket dokumentieren |
-p | Ob es sich bei dem Dateinamen um eine FIFO-Datei (Stapeldatei) handelt |
-L | Ob es sich bei dem Dateinamen um eine Verbindungsdatei handelt |
über DateienBerechtigungserkennung,wie:test -r filename
Parameter | Bedeutung |
---|---|
-r | Hat der DateinamelesbarEigenschaften |
-w | Hat der DateinameschreibbarEigenschaften |
-x | Hat der DateinameAusführbarEigenschaften |
-u | Hat der DateinameSUIDEigenschaften |
-g | Hat der DateinameSGIDEigenschaften |
-k | Hat der DateinameKlebriges StückEigenschaften |
-s | Ist der Dateinamenicht leere Datei |
umVergleich zwischen zwei Dateien,wie:test file1 -nt file2
Parameter | Bedeutung |
---|---|
-nt | (neuer als), Richterfile1 Ist es besser alsfile2 neu |
-ot | (älter als), Richterfile1 Ist es besser alsfile2 alt |
-ef | Richterfile1 Undfile2 Unabhängig davon, ob es sich um dieselbe Datei handelt, kann sie verwendet werdenHarter Linkauf das Urteil vonDie Hauptbedeutung besteht darin, festzustellen, ob die beiden Dateien auf dasselbe verweisen inode |
umBestimmung zwischen zwei ganzen Zahlen,wie:test num1 -eq num2
Parameter | Bedeutung |
---|---|
-eq | Zwei Zahlen sind gleich |
-ne | Zwei Zahlen sind nicht gleich |
-gt | num1 mehr als dienum2 |
-lt | num1 weniger alsnum2 |
-ge | num1 größer oder gleichnum2 |
-le | num1 Gleich oder kleiner alsnum2 |
BestimmungString-Daten
Parameter | Bedeutung |
---|---|
-z | Wenn es sich um eine leere Zeichenfolge handelt, kehren Sie zurücktrue |
-n | Wenn es sich nicht um eine leere Zeichenfolge handelt, danntrue |
= | str1 == str2 , dann zurücktrue |
!= | str1 != str2 , dann zurücktrue |
Mehrfaches bedingtes Urteil,wie:test -r filename -a -x filename
Parameter | Bedeutung |
---|---|
-a | (und) Beide Situationen werden gleichzeitig hergestellt |
-o | (oder) eine der beiden Situationen ist wahr |
! | logische Verneinung |
[]
test
Und[]
Der Effekt ist der gleiche[]
Zwei Symbole müssen links und rechts durch Leerzeichen getrennt werden[ "a" = "b" ]
> <
Muss geschrieben werden als> /<
Flucht[]
mittlere Saite bzw${}
Verwenden Sie so oft wie möglich Variablen""
In doppelte Anführungszeichen gesetzt, um undefinierte Verweise auf Werte zu vermeiden[ -n "$filename" ]
[]
Kann verwendet werden-a -o
Logische Operationen ausführen, nicht unterstützt&& ||
[]
ist ein integrierter Bash-Befehl[[]]
Zwei Symbole müssen links und rechts durch Leerzeichen getrennt werden[[ "a" = "b" ]]
> <
, kein Grund zur Flucht[[]]
mittlere Saite bzw${}
Verwenden Sie so oft wie möglich Variablen""
in doppelte Anführungszeichen eingeschlossen ""
Wenn es in doppelte Anführungszeichen gesetzt wird, wird ein Muster- und Metazeichenabgleich durchgeführt.[[]]
Kann innerlich verwendet werden&& ||
Führen Sie logische Operationen durch[[]]
Es ist das Schlüsselwort von Bash[[]]
Andere Verwendungen sind die gleichen wie[]
Dasselbe#!/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
Grammatik: Hiertest command
Undif-else
Das Anweisungsformat ist dasselbe und Sie können jeden Bash-Befehl verwenden
while
vontest command
Der Exit-Statuscode muss sich mit dem Befehl in der Schleife ändern. Andernfalls wird die Schleife kontinuierlich fortgesetzt, wenn sich der Statuscode nicht ändert.while test command
do
commands
done
while
BefehlEs können mehrere Testbefehle geschrieben werden
var1=10
while echo $var1
[ $var1 -ge 0 ]
do
echo "This is inside the loop"
var1=$[ $var1 -1 ]
done
until
Undwhile
Jaentgegengesetzte Bedeutung,until
Für den Befehl müssen Sie a angebenTestbefehle, die Exit-Codes ungleich Null zurückgeben
until test commands
do
other commands
done
until
AuchUnterstützt mehrere Testbefehle, nur der letzte bestimmt, ob Bash andere Befehle ausführtuntil echo $var1
[ $var1 -eq 0 ]
do
echo "Inside the loop:$var1"
var1=$[ $var1 - 25 ]
done
break
Beendet automatisch die meiste Speicherschleife, in der es sich befindetn
Gibt die Schleifenebene an, aus der herausgesprungen werden soll. Der Standardwert ist 1 und die nächste Ebene ist 2.break n
for (( a = 1;a<10;a++ ))
do
echo "The number is $a"
done > test.txt
echo "Finished"