Nowe posty

Autor Wątek: petla while  (Przeczytany 4059 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 »

Offline arecki

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 110
    • Zobacz profil
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 :)

Offline arecki

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 110
    • Zobacz profil
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: 305
    • 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

Offline parana

  • Users
  • Użytkownik
  • **
  • Wiadomości: 87
    • Zobacz profil
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


ASRock A320M-HDV 3.0, ASRock TPM2-S, Athlon 200GE, 2X4GB 2400MHz Ballistix Sport LT, PCIe Gen 3 M2 Silicon 128 GB, 2XSSD Silicon Power A55 256GB, Logic M4, Be quiet! B9 350W, SilentiumPC Zephyr 80mm. GNU/Linux Debian 10
Nauka na VPS - https://mikr.us/?r=a406 (Polecam 5% taniej)

Offline arecki

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 110
    • Zobacz profil
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: 305
    • Zobacz profil
Odp: petla while
« Odpowiedź #8 dnia: 2019-12-14, 21:30:58 »
Nie. Kolega parana pozamiatał :D Polać mu!
marcin82

Offline arecki

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 110
    • Zobacz profil
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

Offline parana

  • Users
  • Użytkownik
  • **
  • Wiadomości: 87
    • Zobacz profil
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
ASRock A320M-HDV 3.0, ASRock TPM2-S, Athlon 200GE, 2X4GB 2400MHz Ballistix Sport LT, PCIe Gen 3 M2 Silicon 128 GB, 2XSSD Silicon Power A55 256GB, Logic M4, Be quiet! B9 350W, SilentiumPC Zephyr 80mm. GNU/Linux Debian 10
Nauka na VPS - https://mikr.us/?r=a406 (Polecam 5% taniej)

Offline exPredator

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 156
    • Zobacz profil
Odp: petla while
« Odpowiedź #12 dnia: 2019-12-17, 22:20:27 »
Do czego ludziom tak archaiczny język dzisiaj?

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2333
  • 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 ?
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122

Offline exPredator

  • Users
  • Stały bywalec
  • ***
  • Wiadomości: 156
    • Zobacz profil
Odp: petla while
« Odpowiedź #14 dnia: 2019-12-18, 08:50:20 »
Nauka jednego języka z tejże rodziny jest bezsensowna, pytania nie zadam bo po co? I tak nikt nie zrozumie że podstawą  (i to razem w komplecie) są C,C#,C++ i Asm. Nauka jednego mija się z celem.