staging.inyokaproject.org

Shell Script Loop Variablen Problem

Status: Ungelöst | Ubuntu-Version: Ubuntu 20.10 (Groovy Gorilla)
Antworten |

Keamas

Anmeldungsdatum:
1. März 2005

Beiträge: Zähle...

Hallo zusammen, ich will mit einer Bash For schleife mehrere Ressourcen anlegen. In diesem Fall mittels Azure CLI in Azure mehrere Subnetze. Aber das Problem ist ganz allgemein in Bash was ich habe und betrifft die Azure CLI nicht wirklich.

Also ich möchte mehrere Subnetze anlegen. Ich habe für die Netze Namen und Subnetze definiert:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21

RG_VNET_916_NAME='RG-VNET'
VNET_NAME_916='VNET'
VNET_PREFIX_916_1='10.72.128.0/22'

SUBNET_NAME_916_VAR='SUBNET_NAME_916_'
SUBNET_NAME_916_1='Sub-1'
SUBNET_NAME_916_2='Sub-2'
SUBNET_NAME_916_3='Sub-3'

SUBNET_PREFIX_916_VAR='SUBNET_PREFIX_916_'
SUBNET_PREFIX_916_1='10.72.144.0/22'
SUBNET_PREFIX_916_2='10.72.148.0/22'
SUBNET_PREFIX_916_3='10.72.152.0/22'

for i in {1..3}
do
  SUB_N_916=('$'$SUBNET_NAME_916_VAR$i)
  SUB_P_916=('$'$SUBNET_PREFIX_916_VAR$i)
  az network vnet create -g $RG_VNET_916_NAME -n $VNET_NAME_916 --address-prefix $VNET_PREFIX_916_1 --subnet-name $SUB_N_916 --subnet-prefix $SUB_P_916
done

Der Output schaut dann wie folgt aus:

1
2
3
4
admin@Azure:~$ echo $SUB_P_916
$SUBNET_PREFIX_916_3   '''__------------>> Hier jedoch würde ich folgendes benötigen: 10.72.152.0/22__'''
admin@Azure:~$ echo $SUBNET_PREFIX_916_3
10.72.152.0/22

Wie schaffe ich es so etwas zu realisieren ? Der Code kann auch Ganz anders sein, wenn es eine einfachere bessere Lösung gibt. Ist jetzt nur mal wie ich es versucht habe.

Hier das Beispiel ohne Azure vereinfacht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
SUBNET_NAME_916_VAR='SUBNET_NAME_916_'
SUBNET_NAME_916_1='Sub-1'
SUBNET_NAME_916_2='Sub-2'
SUBNET_NAME_916_3='Sub-3'

SUBNET_PREFIX_916_VAR='SUBNET_PREFIX_916_'
SUBNET_PREFIX_916_1='10.72.144.0/22'
SUBNET_PREFIX_916_2='10.72.148.0/22'
SUBNET_PREFIX_916_3='10.72.152.0/22'

for i in {1..3}
do
  SUB_N_916=('$'$SUBNET_NAME_916_VAR$i)
  SUB_P_916=('$'$SUBNET_PREFIX_916_VAR$i)
  echo $SUB_N_916  $SUB_P_916
done

Output

1
2
3
$SUBNET_NAME_916_1 $SUBNET_PREFIX_916_1
$SUBNET_NAME_916_2 $SUBNET_PREFIX_916_2
$SUBNET_NAME_916_3 $SUBNET_PREFIX_916_3

Allerdings sollte der output so ausschauen:

1
Sub-1 10.72.144.0/22

Hat jemand eine Idee ?

Bearbeitet von rklm:

Codeblock aufgeteilt und Konsoleausgaben auf "console" gestellt

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Schau Dir mal Arrays an. Damit lässt ich das einfach machen.

Bzw. mit assoziativen Arrays könntest Du die Zuordnung auch noch direkter machen. Da hast Du dann eben keine Zahlschleife mehr, sondern durchläufst einfach alle Array-Elemente, was man aber bei normalen Arrays dann ggf. auch einfach tut, um keinen Zähler verwenden zu müssen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Hilft Dir dies weiter:

1
2
3
4
5
6
7
subnetz_p=(10.72.1{44,48,52}.0/22) 
echo ${subnetz_p[0]}
10.72.144.0/22
echo ${subnetz_p[1]}
10.72.148.0/22
echo ${subnetz_p[2]}
10.72.152.0/22
Antworten |