Hallo,
aufbauend auf Info von hier https://forum.ubuntuusers.de/topic/bash-variablengenerierung-mit-fuehrenden-nulle/ möchte ich ein flexibles Downloadscript schreiben, dem ich die "von" und "bis" Werte per Parameter übergeben kann. Bisher befindet es sich in der Testphase, da habe ich die Parameter per z.B. "declare -i startk=99" definiert. Das soll dann am Ende z.B. so verwendet werden: declare -i startk=$1
Leider klappt da was nicht. Das Skript soll am Ende etwa aussehen, nur eben das es auch funktionieren soll wie gedacht. In der Testphase ist das "wget" noch durch ein "echo wget" ersetzt
1 2 3 4 5 6 7 8 | #!/bin/bash echo Start of $0 declare -i startk=99 declare -i endk=111 namestart=https://static.example.com/path/filename nameend=.jpg for i in {$startk..$endk}; do k="$(printf '%03d' "$i")"; echo wget $namestart$k$nameend; done echo End of $0 |
Das gibt folgenden Fehler:
1 2 3 4 5 | $ ./download-dummytest.sh
Start of ./download-dummytest.sh
./download-dummytest.sh: line 8: printf: {99..111}: invalid number
wget https://static.example.com/path/filename000.jpg
End of ./download-dummytest.sh
|
In einer Schleife mit "{n1..n2}" kann man zumindest so die Zahlen n1 und n2 wohl nicht durch Variablen ersetzten.
Wenn ich das ganze so programmiere
1 2 3 4 5 6 7 8 9 10 | #!/bin/bash echo Start of $0 #declare -i startk=99 #declare -i endk=111 namestart=https://static.example.com/path/filename nameend=.jpg for i in {99..111}; do k="$(printf '%03d' "$i")"; echo wget $namestart$k$nameend; done echo End of $0 |
macht das Skript das was es soll, ich müßte dann aber für jeden Aufruf das Script ändern, anstatt die Variablen an das Skript zu übergeben. (Die Variablen $namestart und $nameend werden am Ende dann auch als Variablen an das Skript übergeben.)
Die letzte Variante sieht dann in der Exekution so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ./download-dummytest.sh Start of ./download-dummytest.sh wget https://static.example.com/path/filename099.jpg wget https://static.example.com/path/filename100.jpg wget https://static.example.com/path/filename101.jpg wget https://static.example.com/path/filename102.jpg wget https://static.example.com/path/filename103.jpg wget https://static.example.com/path/filename104.jpg wget https://static.example.com/path/filename105.jpg wget https://static.example.com/path/filename106.jpg wget https://static.example.com/path/filename107.jpg wget https://static.example.com/path/filename108.jpg wget https://static.example.com/path/filename109.jpg wget https://static.example.com/path/filename110.jpg wget https://static.example.com/path/filename111.jpg End of ./download-dummytest.sh |
Das Problem also, wie kann ich per for i in {$startk..$endk} und k="$(printf '%03d' "$i")" eine Schleife erzeugen, welche die Von und Bis Zahlen als übergebene Variable annehmen kann?