Frage Bash Script funktioniert nicht?


Ich habe ein Skript gemacht, um zu überprüfen, ob sdb oder sdc Laufwerke vorhanden sind. Aber selbst wenn ich beides oder eins von ihnen habe, endet das Skript. Was ist falsch an meinem Skript?

HDD1="sdb"
HDD2="sdc"

echo "Checking if necessary hard drives for NFS are present:"

function checkdrive 
{
DRIVE_CHK1=$(lsblk -o NAME | grep -w $1)
DRIVE_CHK2=$(lsblk -o NAME | grep -w $2)

if [ "$DRIVE_CHK1" == "$1" ]; then
    echo Found $1 drive.
    drive=$1
elif [ "$DRIVE_CHK2" == "$2" ]; then
    echo Found $2 drive.
    drive=$2
else
    echo ERROR! Could not locate hard drives.
    echo Terminating script.
    exit
fi
}

checkdrive $HDD1 $HDD2

2
2018-04-08 12:50


Ursprung


Haben Sie sich den Output von lsblk -o NAME | grep -w sda1? - steeldriver
Du realisierst grep, zeigt Ihnen standardmäßig Linien das Spiel, oder? - glenn jackman
lsblk -o NAME zeigt mir die block devices, jeweils in einer Zeile (mit Ausnahme von Partitionen, wie sda1 und so weiter). - zhongfu
@ zhongfu das Standardformat in den letzten Versionen scheint zu sein tree- wie Ausgang; Die einfache Liste erfordert eine explizite -l Schalter - steeldriver
simple test macht `if [[-z" $ (blkid | grep sdc) "]] dann; Echo "kein SDC"; fi ' - Panther


Antworten:


Sie führen das Skript ohne den Shebang aus. Wenn du den Shebang nicht hast, musst du ihn mit dem vorhergehenden ausführen:

/bin/bash <script>

Egal ob das Skript ausführbar ist oder nicht ...
Wenn ich das Skript mit dem obigen Befehl auf meinem System ausführe, funktioniert es einwandfrei.


3
2018-04-08 12:56



Das behebt das tatsächliche Problem in dem Skript nicht. - glenn jackman
@glennjackman Ich habe es mit dem obigen Befehl getestet, die Ausgabe lautet: Checking if necessary hard drives for NFS are present: Found sdb drive Wenn ich es abziehe, gibt es die entsprechende Nachricht: ERROR! Could not locate hard drives - Jacob Vlijm
@salim perfekt! Ich bin froh, dass es funktioniert. - Jacob Vlijm


Versuchen Sie "debuggen" Sie Ihr Skript mit Set-X, einfach in Ihrem Skript als erster Befehl (Sie können dies auch in Ihrer Konsole einstellen, schauen).

[simmel]@[mars]$ set -x
[simmel]@[mars]$ echo Hello
+ echo Hello
Hello

Das + -Zeichen zeigt den Befehl, der ausgeführt wurde, und die Zeile danach ist die Ausgabe dieses Befehls.

Überprüfen Sie Ihre Ausgabe Schritt für Schritt und sehen Sie, ob Sie zurück, was Sie suchen.


1
2018-04-08 13:01