Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Pętla "for" - Powałoka sh  (Przeczytany 8533 razy)

Physix

  • Gość
Pętla "for" - Powałoka sh
« dnia: 2010-02-26, 17:38:39 »
Witam,

mam pytanie w sprawie pętli 'for' w powłoce 'sh'.
Załóżmy że mam takiego prostego for'a

for i in 1 2 3 4 5 ; do
      echo $i;
done
Wyświetli mi on liczby od 1 do 5, ale np gdybym chciał wyświetlić 100 kolejnych liczb, wypisywanie po kolei  każdej z nich jest bardzo uciążliwe.
Czy można rozwiązać tego for'a w inny sposób, np czy można wartości zczytać z pliku tekstowego ??
W bash'u nie ma problemu, tam for wygląda jak w C++

Proszę o pomoc.
Pozdrawiam.

energizer

  • Gość
Pętla "for" - Powałoka sh
« Odpowiedź #1 dnia: 2010-02-26, 17:53:38 »
Do tego lepiej chyba użyć pętli 'while'
#!/bin/sh
i=0;
while [ $i -le 10 ]; do
i=$[i+1]; #inkrementujemy licznik
echo $i
done

Physix

  • Gość
Pętla "for" - Powałoka sh
« Odpowiedź #2 dnia: 2010-02-26, 18:09:38 »
Dziękuje za szybką odpowiedź, też myślałem żeby zrobić to while'm dlatego dzięki za składnie.

Tak żeby się upewnić, nie ma innej opcji z for'em ??

edit...

Niestety gdy próbuje uruchomić ten skrypt z while'em
 
#!/bin/sh
i=0;
while [ $i -le 10 ]; do
i=$[i+1]; #inkrementujemy licznik
echo $i
done
wyświetla:
$[i+1]
[: 6: Illegal number: $[i+1]

Czy ktoś wie gdzie leży przyczyna ?

ra-v

  • Gość
Pętla "for" - Powałoka sh
« Odpowiedź #3 dnia: 2010-02-27, 01:08:38 »
Może wywal te średniki za "i=0" i "i=$[i+1]".
Lub zamiast "i=$[i+1]" użyj "i=$((i+1))".

Dziwne, ale u mnie to co wyżej działa. Może zapisałeś w jakimś dziwnym edytorze (notepad) i ma koniec linie "\\r\\n" - już też miałem takie przypadki że skrypt nie chciał odpalać.

npck

  • Gość
Pętla "for" - Powałoka sh
« Odpowiedź #4 dnia: 2010-02-27, 01:16:01 »
Można to napisać też tak....

 for i in `seq 1 100`;do echo $i;done

Physix

  • Gość
Pętla "for" - Powałoka sh
« Odpowiedź #5 dnia: 2010-02-27, 09:33:50 »
Cytat: ra-v
Lub zamiast "i=$[i+1]" użyj "i=$((i+1))".
Dzięki, te podwójne nawiasy pomogły.

Cytat: npck
for i in `seq 1 100`;do echo $i;done.
Dzięki tez za tego 'seq' o to właśnie mi chodziło z for'em