Nowe posty

xx Odpowiednie wykorzystanie rdzeni P i E procesora (1)
Dzisiaj o 06:44:59
xx Samba DC/AD problem z DNS (0)
2024-07-25, 12:42:23
xx DNS i WWW na virtualbox (4)
2024-07-24, 10:30:38
xx Instalacja Manjaro Linux (11)
2024-07-13, 22:57:31
xx Linux Lite 6.6. Po uruchomieniu z DVD przeglądarka Chrome jest nieaktywna (12)
2024-07-10, 22:33:30
xx Laptop MSI CR500 - nie akceptuje linuksa (6)
2024-07-03, 05:30:18
xx Co to jest ? (3)
2024-07-02, 13:36:58
xx Nowa wersja libreoffice (1)
2024-06-30, 18:22:49
xx Dystrybucja - środowisko graficzna dla amigowca (MUI) (4)
2024-06-30, 12:14:25
xx Jaki kod błędu zwracać z kernela? (3)
2024-06-09, 12:29:22

Autor Wątek: bash - problem z zadaniem  (Przeczytany 6022 razy)

adruś

  • Gość
bash - problem z zadaniem
« dnia: 2007-03-24, 19:46:31 »
hej, pomógłby mi ktoś z dwoma zadaniami z bash-u??  Chodzi mi o skrypty:

1) obliczajacy wartosc wyrazenia 1 - 2 + 3 - 4 + 5 - 6 + ... + 99 - 100
2) dla liczbowego parametru skryptu wypisuje czy jest on mniejszy od 10,
rowny 10, pomiedzy 10 a 20, rowny 20 czy wiekszy od 20.

z góry dzięki za pomoc


Maciek_Rutecki

  • Gość
bash - problem z zadaniem
« Odpowiedź #1 dnia: 2007-03-25, 10:09:45 »
2007-03-24 19:46:31 adruś napisał:

> hej, pomógłby mi ktoś z dwoma zadaniami z bash-u??  Chodzi mi o skrypty:
 >
 > 1) obliczajacy wartosc wyrazenia 1 - 2 + 3 - 4 + 5 - 6 + ... + 99 - 100
 > 2) dla liczbowego parametru skryptu wypisuje czy jest on mniejszy od 10,
 > rowny 10, pomiedzy 10 a 20, rowny 20 czy wiekszy od 20.
 >
 > z góry dzięki za pomoc
 >
 >

http://rtfm.killfile.pl/#praca_domowa

--
Maciek

adruś

  • Gość
bash - problem z zadaniem
« Odpowiedź #2 dnia: 2007-03-25, 11:25:03 »
ok, zrozumiałem. Jestem z basha kompletnie zielony, poczytałem więc troszkę podstaw i skleiłem taki oto skrypt:

#!/bin/bash

echo "Skrypt obliczajacy wartosc wyrazenia 1-2+3-4+5-6+...+99-100"

liczba1=1;
liczba2=2;
wynik=0;

while [ liczba2 -le 100 ]; do
      wynik=$[wynik + liczba1 - liczba2]
      liczba1=$[liczba1 + 2]
      liczba2=$[liczba2 + 2]
   
done

echo "Wartosc tego wyrazenia wynosi: $wynik"

Czy ma to sens i ma prawo zadziałać? Jeśli nie, to proszę o podpowiedź.

gomath

  • Gość
bash - problem z zadaniem
« Odpowiedź #3 dnia: 2007-03-25, 12:04:57 »
2007-03-25 11:25:03 adruś napisał:

 > Czy ma to sens i ma prawo zadziałać? Jeśli nie, to proszę o podpowiedź.
 >

Heh... uruchom i sprawdź!!

W warunku pętli while powinieneś zamiast 'liczba2' mieć '$liczba2' (do wartości zmiennych odwołujemy się znakiem '$').



Maciek_Rutecki

  • Gość
bash - problem z zadaniem
« Odpowiedź #4 dnia: 2007-03-25, 12:08:45 »
2007-03-25 11:25:03 adruś napisał:

> ok, zrozumiałem. Jestem z basha kompletnie zielony, poczytałem więc troszkę podstaw i skleiłem
 > taki oto skrypt:
 >
 > #!/bin/bash
 >
 > echo "Skrypt obliczajacy wartosc wyrazenia 1-2+3-4+5-6+...+99-100"
 >
 > liczba1=1;
 > liczba2=2;
 > wynik=0;
 >
 > while [ liczba2 -le 100 ]; do
 >       wynik=$[wynik + liczba1 - liczba2]
 >       liczba1=$[liczba1 + 2]
 >       liczba2=$[liczba2 + 2]
 >    
 > done
 >
 > echo "Wartosc tego wyrazenia wynosi: $wynik"
 >
 > Czy ma to sens i ma prawo zadziałać? Jeśli nie, to proszę o podpowiedź.
 >

Już lepiej :) Zainteresuj się poleceniem let:

liczba_1=1
liczba_2=4
let wynik=$liczba_1+$liczba_2
maciek@rutek:~/tmp$ echo $wynik
5

przy let... nie może być spacji przy znaku równości.

Masz skrypt, ale musisz z niego wywalić parę nadmiarowych zmiennych i operacji. Taka praca domowa:

#!/bin/sh
liczba=1
wynik=0
temp=1
limit=50
while [ $temp -le $limit ]
do
   let liczba2=2*liczba
   let wynik=$[wynik + liczba - liczba2]
   let temp=$liczba+1
   let liczba=$temp
done
echo $wynik

IMO wystarczy zliczanie do 50.

--

Maciek

PS. Co do drugiego problemu, to parametrem przekazywanym jako argument będzie wartość $1 musisz sprawdzić czy $1 będzie z wymaganego zakresu.

adruś

  • Gość
bash - problem z zadaniem
« Odpowiedź #5 dnia: 2007-03-26, 11:26:45 »
ok, no to jeszcze tylko drugie zadanko i już będzie wszystko, wypisałem taki oto skrypt, tylko czy on nie będzie traktował wpisywanych liczb jako tekst i wykona warunki?

#!/bin/bash

przedzial_1=10;
przedzial_2=20;

echo -n "Podaj liczbe calkowita:a"

read wpis

   if [ $wpis < $przedzial_1 ]; do
      echo "Wpisana liczba ( $wpis ) jest mniejsza od $przedzial_1"
        elif [ $wpis = $przedzial_1 ]
           echo "Wpisana liczba jest rowna $przedzial_1"
        elif [ $przedzial_1 < $wpis < $przedzial_2 ]
           echo "Wpisana liczba ( $wpis ) jest pomiedzy 10 a 20"
        elif [ $wpis = $przedzial_2 ]
           echo "Wpisana liczba jest rowna $przedzial_2"
        elif [ $wpis > $przedzial_2 ]
           echo "Wpisana liczba ( $wpis ) jest wieksza od $przedzial_2"
        else
           echo "Nie zostala wprowadzona liczba"
        fi

Maciek_Rutecki

  • Gość
bash - problem z zadaniem
« Odpowiedź #6 dnia: 2007-03-26, 22:53:55 »
2007-03-26 11:26:45 adruś napisał:

> ok, no to jeszcze tylko drugie zadanko i już będzie wszystko, wypisałem taki oto skrypt, tylko
 > czy on nie będzie traktował wpisywanych liczb jako tekst i wykona warunki?
 >
 
Masz w ogóle dostęp do shella, że nie możesz sam sprawdzić?

--
Maciek

adruś

  • Gość
bash - problem z zadaniem
« Odpowiedź #7 dnia: 2007-03-27, 09:21:06 »
A da rade po windowsem to sprawdzić? bo linuksa nie mam w domu :(

Maciek_Rutecki

  • Gość
bash - problem z zadaniem
« Odpowiedź #8 dnia: 2007-03-27, 09:28:52 »
2007-03-27 09:21:06 adruś napisał:

> A da rade po windowsem to sprawdzić? bo linuksa nie mam w domu :(

http://pl.wikipedia.org/wiki/Cygwin

--
Maciek

gomath

  • Gość
bash - problem z zadaniem
« Odpowiedź #9 dnia: 2007-03-27, 09:29:50 »
2007-03-27 09:21:06 adruś napisał:

> A da rade po windowsem to sprawdzić? bo linuksa nie mam w domu :(

Da radę z pomocą cygwin (http://www.cygwin.com/) lub jakiejkolwiek dystrybucji Live.