ubuntuusers.de

Bash script fehler

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

dsm4

Anmeldungsdatum:
9. April 2021

Beiträge: 20

Hallo, ich habe ein Problem mit meinem bash script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/bin/bash

read -p "Server Hochfahren oder Herunterfahren?" A

#Hochfahren oder Herunterfahren
if [ "$A" == "Ho" ];then
        echo "Server wird Hochgefahren"
python wake.py 192.168.2.255 3c:7c:3f:81:cd:07
elif [ "$A" == "He" ];then
        echo "Server wird Heruntergefahren"
ssh root@192.168.2.132 'ethtool -s enp4s0 wol g && shutdown -h now'

if [ "$A" == "ho" ];then
        echo "Server wird Hochgefahren"
python wake.py 192.168.2.255 3c:7c:3f:81:cd:07
elif [ "$A" == "he" ];then
        echo "Server wird Heruntergefahren"
ssh root@192.168.2.132 'ethtool -s enp4s0 wol g && shutdown -h now'

#shell
elif [ "$A" == "s" ];then
exit
elif [ "$A" == "shell" ];then
exit
elif [ "$A" == "c" ];then
exit

#schließen
elif [ "$A" == "e" ];then
kill -HUP $PPID
elif [ "$A" == "q" ];then
kill -HUP $PPID
elif [ "$A" == "exit" ];then
kill -HUP $PPID
elif [ "$A" == "quit" ];then
kill -HUP $PPID
elif [ "$A" == "quiet" ];then
kill -HUP $PPID

else
clear
        echo "Detect failed(only Ho or He)"
./server.sh
fi

Das script heißt server.sh. Jedoch wenn ich das script ausführe kommt dieser Error:

1
2
3
4
root@Wol:/# ./server.sh 
Server Hochfahren oder Herunterfahren?He
./server.sh: Zeile 46: Syntax Fehler: Unerwartetes Dateiende.
root@Wol:/# 

Vielleicht kann mir jemand helfen? Grüße

CarstenHa

Avatar von CarstenHa

Anmeldungsdatum:
1. Mai 2020

Beiträge: 138

Erst mal herzlich Willkommen im Forum. Die Zeilen 6-11 und 13-18 kann man zusammenfassen:

1
2
3
4
5
6
7
#Hochfahren oder Herunterfahren
if [[ "$A" == [hH]o ]];then
 echo "Server wird Hochgefahren"
 python wake.py 192.168.2.255 3c:7c:3f:81:cd:07
elif [[ "$A" == [hH]e ]];then
 echo "Server wird Heruntergefahren"
 ssh root@192.168.2.132 'ethtool -s enp4s0 wol g && shutdown -h now'

Ansonsten das if am Anfang von Zeile 13 durch ein elif ersetzen.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Rück den Code doch mal sauber ein, dann siehst du, dass da nach dem elif in Zeile 9 ein fi (vermutlich in Zeile 12) fehlt oder das if in Zeile 13 muss ein elif sein.

Außerdem könntest du ein case-Statement (vgl. z.B. https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_03.html) statt den langen if-elif-else-fi Blöcken nutzen und es ist suboptimal, dass sich das Skript selbst aufruft, wobei der Eltern-Prozess unnötigerweise erhalten bleibt. Das kann mit exec umgehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash

read -p "Server Hochfahren oder Herunterfahren?" A

#Hochfahren oder Herunterfahren
case "$A" in
[Hh]o)
    echo "Server wird Hochgefahren"
    python wake.py 192.168.2.255 3c:7c:3f:81:cd:07
    ;;
[Hh]e)
    echo "Server wird Heruntergefahren"
    ssh root@192.168.2.132 'ethtool -s enp4s0 wol g && shutdown -h now'
    ;;

[sc])
"shell")
    exit
    ;;

#schließen
[eq])
"exit")
"quit")
"quiet")
    kill -HUP $PPID
    ;;
*)
    clear
    echo "Detect failed(only Ho or He)"
    exec ./server.sh
    ;;
esac
Antworten |