2017-10-25 5 views
1

Ich schreibe ein Skript, um eine ausführbare Datei (Arm ausführbare Datei) in Linux zu generieren, indem Sie eine benutzerdefinierte .s-Datei aufnehmen. Also gibt der Benutzer eine Eingabedatei ein, sagen wir "input.s" und einen Ausgabedateinamen, sagen wir "output.axf" und das Skript erzeugt die gewünschte Ausgabe (ausführbar - .axf). Jetzt möchte ich eine zusätzliche Option, in der, wenn der Benutzer keinen Ausgabedateinamen in den Argumenten gibt, ich selbst eine Standardausgabedatei erstellen möchte. Das Skript wird wie folgt dar:Zuweisen einer Variablen ein Dateiname in Bash

#!/bin/bash 
echo Enter the names of the input file and output file 
read input_file output_file 

if [ -z "$input_file" ] 
    then 
     echo "No input supplied" 

elif [ -z "$output_file" ] 
    then 
     $output_file=brot.axf 

elif [ -z "$input_file" && -z "$output_file" ] 
    then 
     echo "No input/output file supplied" 
fi 

ifilename=$(basename "$input_file") 
ifilename="${input_file%.*}" 

armasm -g --cpu=8-A.64 "$input_file" 
armlink "$ifilename.o" -o "$output_file" 
fromelf --test -c $output_file > disassembly.txt 

Nun mein Problem ist, dass jedes Mal, wenn ich das Skript ausführen, und geben Sie nicht alles für $ output_file, bekomme ich diesen Fehler:

./script_test.sh: Linie 12 : = brot.axf: Befehl nicht gefunden

Schwerwiegender Fehler: L3901U: Fehlendes Argument für Option 'o'.

Wenn ich jedoch die Eingabe- und Ausgabedateinamen mit Erweiterungen angeben, funktioniert wie erwartet. Wie behebe ich den Fehler und weise der Ausgabedatei einen Standardnamen zu, wenn der Benutzer diesen nicht zuweist?

+1

Copy Paste in shellcheck.net zu entfernen. Ich sehe einige Syntaxverstöße auf den ersten Blick selbst. 1) Variable Zuweisungen haben nicht '$' auf LHS in 'bash', 2. Nicht abgeschlossen '' ' – Inian

+0

Ich habe Änderungen am Skript nach dem Eintragen in shellcheck.net. Es ist ein nützliches Werkzeug. Danke –

Antwort

2

Variable Zuweisungen nicht $ Notation in bash Shell. Sie müssen nur unten ohne $

output_file="brot.axf" 

Und später im Skript, wenn filename eine Variable ist und einen Namen mit .o beigefügten zu konstruieren versucht, schließen Sie die Variablennamen innerhalb {}, so dass die Variable richtig erweitert wird

armlink "${filename}.o" -o "$output_file" 

Auch durch das Aussehen davon haben Sie einen Tippfehler in der filename als Variable ifilename. Wenn Sie versuchen, es zu verwenden, double-zitieren Sie es wie oben.

+1

Danke. Das Problem behoben :) –

0

Sie haben die $ vor output_file am 12. Zeile Skript

output_file=brot.axf 
Verwandte Themen