Nowe posty

xx Dystrybucja pod HP Omen (6)
2024-03-27, 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
lamp Problem z Linux Lite po instalacji (0)
2024-03-27, 19:50:30
xx Ile pingwinów? (1)
2024-03-27, 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: plansza  (Przeczytany 4175 razy)

ferroy

  • Gość
plansza
« dnia: 2008-05-20, 21:49:52 »
niby bardzo proste ale mi sie nie chce udac...
chce zbudowac plansze z polami  od 1 do 63
tak zeby 9 cyfr bylo w jednej linii

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

n=0
while test $n -le 62; do
n=$[$n+1]
if test 0=$[$n%9]; then
echo -n  " $n"  lub -e "\\n $n"
fi
done
nie udaje mi sie zeby po 9 liczbach skoczyl do nastepnel linijki

dzieki za pomoc

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
plansza
« Odpowiedź #1 dnia: 2008-05-20, 22:10:04 »
n=1
while [ $n -le 63 ]; do
    echo -n "$n "
    if [ $[$n%9] -eq 0 ]; then
        echo -ne "\\n"
    fi
    n=$[$n+1]
done
Lepiej używać "[ ]" zamiast polecenia test.

Co do problemu, to głównie chodziło o składnie warunku w if - liczby porównuje się "-eq", "-lt", "-le", ...
"==" jest tylko dla stringów, a "=" to w ogóle nie jest operator logiczny.

BTW. Inkrementuje się raczej na końcu pętli, więc nieco zmieniłem kod.

Musisz jeszcze pokombinować z wyrównywaniem liczb mających mniej cyfr. Możesz chociażby dodawać spacje dla liczb mniejszych od 10.

Żeby kod był idealny (i output wyglądał prawidłowo np. przy wrzuceniu go do pliku) należałoby jeszcze pozbywać się ostatniej spacji w wierszu. W tym celu najlepiej zamienić linię `echo -ne "\\n"` na `echo -ne "\\b\\n"`. man echo.

arctgx

  • Gość
plansza
« Odpowiedź #2 dnia: 2008-05-20, 22:15:45 »
Cytat: ultr
"=" to w ogóle nie jest operator logiczny.
Może "==" nie zaszkodzi, ale w bashu przynajmniej "=" jest dopuszczalne:

Cytat: man bash
łańcuch1 == łańcuch2
              Prawda jeśli łańcuchy są równe. Zamiast == można użyć =.
i na prostym doświadczeniu mozna się o tym przekonać.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
plansza
« Odpowiedź #3 dnia: 2008-05-20, 22:17:30 »
Hmm... Faktycznie :) Za dużo C++ :P

Ale nie zmienia to faktu, że do liczb nie używa się ani jednego ani drugiego.

ferroy

  • Gość
plansza
« Odpowiedź #4 dnia: 2008-05-26, 19:34:05 »
do problemu z cyframi  od 1-9. mozna go  tylko spacjami rozwiazac??
bo tylko ta mozliwosc jest w moim zasiegu umiejetnosci...

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
plansza
« Odpowiedź #5 dnia: 2008-05-26, 22:19:03 »
> mozna go  tylko spacjami rozwiazac??

Chyba najlepsze rozwiązanie, bo pozwala ci po przekierowaniu wyjścia do pliku uzyskać ładną i zgodną z oczekiwaniami zawartość.

Można także przenosić kursor w obliczone miejsce (x,y) i wypisywać tekst bezpośrednio w tym miejscu. Ale nie wiem, czy wszystkie emulatory terminala ci na to pozwolą (zapewne większość tak). http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.html