Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: petla while  (Przeczytany 6044 razy)

Offline Heng

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 15
    • Zobacz profil
petla while
« dnia: 2019-12-14, 16:03:13 »
Witam
Męcze sie z pętlą while moze mógł by ktoś coś doradzić
#!/bin/bash
x=1;
while [ $x -le 30 ] ; do
    echo "Napis pojawił się po raz: $x"
    x=$[x + 1]
done
daje wynik :

Napis pojawił się po raz: 1
Napis pojawił się po raz: 2
Napis pojawił się po raz: 3
Napis pojawił się po raz: 4
Napis pojawił się po raz: 5
Napis pojawił się po raz: 6
Napis pojawił się po raz: 7
Napis pojawił się po raz: 8
Napis pojawił się po raz: 9
Napis pojawił się po raz: 10

a ja bardzo chciałbym aby wynik był dwucyfrowy tz:

Napis pojawił się po raz: 01
Napis pojawił się po raz: 02
Napis pojawił się po raz: 03
.......
Napis pojawił się po raz: 30




 czy da sie to w jakis łatwy sposób rozwiazać ?
Pozdrawiam
« Ostatnia zmiana: 2019-12-14, 17:50:56 wysłana przez Heng »

beaker

  • Gość
Odp: petla while
« Odpowiedź #1 dnia: 2019-12-14, 17:32:40 »
Rozwiązać się da, tylko po co?
#!/bin/bash
x=1;
while [ $x -le 10 ] ; do
    #tutaj if sprawdzający czy x jest większe równe 10
    echo "Napis pojawił się po raz: $x"
    #tutaj else lub sprawdzenie czy x jest w zakresie 1-9
     echo "Napis pojawił się po raz: 0$x"
x=$[x + 1]
done
Chociaż dla takiego zakresu liczb 1-10 można by to jeszcze uprościć

#!/bin/bash
x=1;
while [ $x -le 9 ] ; do
     echo "Napis pojawił się po raz: 0$x"
x=$[x + 1]
done
x=$[x + 1]
echo "Napis pojawił się po raz: $x"
« Ostatnia zmiana: 2019-12-14, 17:44:53 wysłana przez arecki »

Offline Heng

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 15
    • Zobacz profil
Odp: petla while
« Odpowiedź #2 dnia: 2019-12-14, 17:50:27 »
a  jak w takim rozwiązaniu wykonasz pętle np do 30 bo 10 podałem tylko jako przykład
i chyba poprawie posta :)

beaker

  • Gość
Odp: petla while
« Odpowiedź #3 dnia: 2019-12-14, 18:26:24 »
Dalej nie wiem po co.
Poza tym pierwszy przykład obejmował przypadek dowolnego zakresu liczb.

Offline Heng

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 15
    • Zobacz profil
Odp: petla while
« Odpowiedź #4 dnia: 2019-12-14, 21:11:50 »
po dodaniu if'a  działa. myślałem o jakiejś ładniejszej funkcji ale aktualnie liczy się aby działało
Dzięki piękne.
ps. zaspokoję twoja ciekawość chodz po co pytać do czego ktoś coś potrzebuje jeśli potrzebuje to najwidoczniej jest to potrzebne ;)
ale do rzeczy ....
potrzebuje to do generowania nazw linków które ktoś sobie wymyślił z zerem z przodu ...99_01_15.pdf ot taka błachostka
ale bez twojej pomocy bym pewnie się męczył  pare godzin dziękuje jeszcze raz i pozdrawiam

Offline marcin'82

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 402
    • Zobacz profil
Odp: petla while
« Odpowiedź #5 dnia: 2019-12-14, 21:14:34 »
Jakby się jakoś udało skrócić printf to może tak?
#!/bin/bash

x=1
while [ $x -le 30 ] ; do
    printf "Napis pojawił się po raz: "
    printf %02d "$x"
    printf "\n"
    x=$[x + 1]
done

Inaczej - spróbuj podać kilka argumentów do printf, ale tak, żeby formatowanie liczby nie świrowało.

parana
Super!
« Ostatnia zmiana: 2019-12-14, 21:30:28 wysłana przez marcin'82 »
marcin82

parana

  • Gość
Odp: petla while
« Odpowiedź #6 dnia: 2019-12-14, 21:27:25 »
#!/bin/bash
x=1;
while [ $x -le 30 ] ; do
   printf "Napis pojawił się po raz: %02d\n" $x
    x=$[x + 1]
done



beaker

  • Gość
Odp: petla while
« Odpowiedź #7 dnia: 2019-12-14, 21:30:26 »
To nie kwestia ciekawości, ale dobrania metody do potrzeb.
Propozycja marcin'82 zdecydowanie lepsza.
A jak sobie będzie pobierał zakres iteracji z argumentu wywołania to będziesz mogł sobie generować dowolny zakres jednym skryptem.
« Ostatnia zmiana: 2019-12-14, 21:32:50 wysłana przez arecki »

Offline marcin'82

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 402
    • Zobacz profil
Odp: petla while
« Odpowiedź #8 dnia: 2019-12-14, 21:30:58 »
Nie. Kolega parana pozamiatał :D Polać mu!
marcin82

beaker

  • Gość
Odp: petla while
« Odpowiedź #9 dnia: 2019-12-14, 21:33:40 »
Zdrówko.

Offline Heng

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 15
    • Zobacz profil
Odp: petla while
« Odpowiedź #10 dnia: 2019-12-14, 21:57:14 »
wysyp eleganckich rozwiazań, szkoda że za pózno, przyda sie dla innych :) dziekuje i pozdrawiam

parana

  • Gość
Odp: petla while
« Odpowiedź #11 dnia: 2019-12-14, 22:14:49 »
A teraz:
                                   
#!/bin/bash
x=1;
while [ $x -le 30 ] ; do
   echo $x | awk '{printf "Napis pojawił się po raz: %02d\n",$1}'
 x=$[x + 1]
done

exTerminator

  • Gość
Odp: petla while
« Odpowiedź #12 dnia: 2019-12-17, 22:20:27 »
***** zdaniem forumowiczów i admina = spam *****
« Ostatnia zmiana: 2020-04-06, 16:39:43 wysłana przez exPredator »

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2763
  • 1709
    • Zobacz profil
Odp: petla while
« Odpowiedź #13 dnia: 2019-12-18, 06:34:44 »
Jak zadasz to samo pytanie ale w nowym temacie to dostaniesz odpowiedz ?
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

exTerminator

  • Gość
Odp: petla while
« Odpowiedź #14 dnia: 2019-12-18, 08:50:20 »
***** zdaniem forumowiczów i admina = spam *****
« Ostatnia zmiana: 2020-04-06, 16:39:51 wysłana przez exPredator »