Witam wszystkich :)
Jestem początkowym użytkownikiem Linux i potrzebuję pomocy. Mianowicie mam do zrobienia dwa skrypty, wszystko idzie po mojej myśli do czasu gdy na końcu wyskakuje komunikat błąd składni : nieoczekiwany koniec pliku w linii w której nic nie napisałem. Szukałem kilka dni czegoś na ten temat i nic nie ma (raczej ja nie mogłem znaleźć). Jako, że jesteście na pewno już dobrze zaprzyjaźnieni z kolegą Linuxem to liczę na waszą pomoc. Dzięki i pozdrawiam
Oto programy :
1. Rozwiązanie równania kwadratowego :
#!/bin/bash
echo "Podaj A"
read A
echo "Podaj B"
read B
echo "Podaj C"
read C
delta="$((b*b-4*a*c))"
echo "scale=2;sqrt($delta) | bc"
if [$delta>0]; then echo "x=$((-b-sqr($delta)/2*a)) ; x=$((-b+sqrt($delta)/2*a)) | bc" fi
if [$delta=0]; then echo "Brak pierwiastków" fi
if [$delta<0]; then echo "x=$((-b/2*a))| bc" fi
end
2. Tworzenie kont z liczbami w kolejności na końcu
#!/bin/bash
echo "Podaj ilość kont"
read x
for ((i=1;$i=$x;i++)) ; do
useradd konto$i
end
ad.1 "fi" jest instrukcją końcową do "if" i powinno być albo w nowej liniii, albo oddzielone średnikiem ";" od poprzedniego polecenia.
Ale program dalej nie będzie działał z powodu błędnego stosowania znaku potoku "|" . To musi być wykonane, a nie wyświetlane poleceniem "echo". Jak na początek, za dużo rzeczy chcesz zrobić w jednej linii i jednym poleceniem. Programu raczej nie pisze się w całości, by później wyłapywać błędy. Trzeba pisać po kolei, testując każdą nowo wprowadzoną frazę. Wtedy też dobrze poznasz basha i jego zachowanie ...
ad.2 Z tego, co pamiętam, struktura pętli to:
for ........
do
........
done
a u Ciebie jest end
Lesio ma rację, powinieneś po kolei testować każdą funkcję...
Zacznij może od założeń, poniżej masz kilka przykładów funkcji "read":
Przykład 00 Wczytanie 3 wartości (rób wszystko w terminalu i kończ enterem):
pablo@pablo:~ > read a b c
jeden 222 trzy
pablo@pablo:~ > echo $a
jeden
pablo@pablo:~ > echo $b
222
pablo@pablo:~ > echo $c
trzy
Przykład 01 Wczytanie 1 wartości (w 3):
pablo@pablo:~ > read a b c
jeden
pablo@pablo:~ > echo $a
jeden
pablo@pablo:~ > echo $b
pablo@pablo:~ > echo $c
Przykład 02 Wczytanie 5 wartości (w 3):
pablo@pablo:~ > read a b c
jeden dwa 333 dupa blada
pablo@pablo:~ > echo $a
jeden
pablo@pablo:~ > echo $b
dwa
pablo@pablo:~ > echo $c
333 dupa blada
Opcja -p "prompt"
Przykład 03 Wczytanie 3 wartości z tekstem:
pablo@pablo:~ > read -p "Proszę podać 3 wartości: " a b c
Proszę podać 3 wartości: jeden 222 trzy
pablo@pablo:~ > echo $a
jeden
pablo@pablo:~ > echo $b
222
pablo@pablo:~ > echo $c
trzy
Przykład 04 Wczytanie 1 wartości i funkcja REPLY:
pablo@pablo:~ > read -p "Proszę o uwagę: "
Proszę o uwagę: mam to GDZIES
pablo@pablo:~ > echo $REPLY
mam to GDZIES
Znam się na matematyce, nie programowaniu. Ale jeśli delta=0 to jest jeden pierwiastek, a jeśli delta<0 to brak. A tak między nami nawet jeśli delta<0 to istnieją pierwiastki tyle, że w dziedzinie liczb zespolonych.