2017-09-26 1 views
0

Ich versuche, ein Bash-Skript zu schreiben, die an das Skript übergebenen Argumente analysiert:Azure bash CLI Unterstützung während und tun

while [[ $# -gt 0 ]] 
do 
     case $1 in 
     -n|--name) 
       VMNAME="$2" 
       shift 
       shift 
     ;; 
     -a|--admin-user) 
       ADMINUSERNAME="$2" 
       shift 
       shift 
     ;; 
     -l|--location) 
       LOCATION="$2" 
       shift 
       shift 
     ;; 
     -g|-resource-group) 
       RESOURCEGROUPNAME="$2" 
       shift 
       shift 
     ;; 
     -a|--availability-set) 
       AVAILABILITYSETNAME="$2" 
       shift 
       shift 
     ;; 
     *) # unknown option 
       echo unknwon "$1" 
       shift # past argument 
     ;; 
     esac 
done 

echo "vn name = " 
echo $VMNAME 
echo "Admin User = " $ADMINUSERNAME 
echo "Location = " $LOCATION 
echo "Resource Group = " $RESOURCEGROUPNAME 
echo "Availability Set = " $AVAILABILITYSETNAME 

Dies funktioniert gut, wenn ich in meinem Linux-vm ssh und das Skript ausführen. Wenn ich versuche, das Skript von meinem Azure CLI auszuführen bekomme ich folgende Fehler:

[email protected]:~/clouddrive$ bash test.bash -n test 
test.bash: line 1: syntax error in conditional expression 
'est.bash: line 1: syntax error near `]] 
'est.bash: line 1: `while [[ $# -gt 0 ]] 

Wie unterscheidet sich die Azure CLI aus dem Linux-Bash-Shell in Bezug auf die es Programmiersprache unterstützt? Welche Art von Programmierkonstrukten und Ablaufsteuerung wird in der Azure Bash CLI unterstützt?

Antwort

1

teste ich in meinem Labor und reproduzieren Ihr Fehler:

enter image description here

Wir Windows (CR LF)-Unix (LF) ändern sollte, dann auf diese Schale hochladen.

enter image description here

+0

Neuvon fehler! Vielen Dank! – Jeremy

2

Die Cloud-Konsole (die Shell im Azure-Portal) führt meines Wissens nur eine Bash-Instanz in einem Container hinter den Kulissen aus. Mit anderen Worten, kein Unterschied. Und wenn ich versuche, das Skript genau auszuführen, wie Sie oben angegeben haben, bekomme ich das erwartete Ergebnis ...

~/clouddrive$ bash test.bash -n funky 
vn name = 
funky 
Admin User = 
Location = 
Resource Group = 
Availability Set = 

Gibt es eine Chance, dass die Zeilenende in Ihrem Skript falsch sind?