Poslao: 31 Maj 2022 13:50
|
offline
- Pridružio: 11 Okt 2014
- Poruke: 355
|
Možete li mi pomoći oko pisanja ove bash skripte?
Napisati BASH Shell skriptu koja prima dva parametra: ime datoteke i ime direktorija.
Prijaviti grešku ako nema dva parametra ili ako prvi nije datoteka ili ako drugi nije direktorij. Ako su parametri korektni, skripta treba da iskopira datoteku u navedeni direktorij.
Probati izvršenje skripte sa
chmod 755 testcopy
./testcopy dat1 /tmp
i još nekim parametrima
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 31 Maj 2022 15:08
|
offline
- bocke

- Moderator foruma
- Glavni moderator Linux foruma
- Pridružio: 16 Dec 2005
- Poruke: 12459
- Gde živiš: Južni pol
|
Jesi li pokušao sam da rešiš zadatak?
Citat:Prijaviti grešku ako nema dva parametra ili ako prvi nije datoteka ili ako drugi nije direktorij.
Ovo ti sadrži gotovo ceo zadatak. Da bi prijavio grešku, moraš da testiraš ove situacije.
Pseudokod
Ako broj parametara nije jednak 2 -> onda napiši grešku
U suprotnom:
Ako prvi parametar nije datoteka -> onda napiši grešku
U suprotnom,
Ako drugi parametar nije direktorijum -> onda napiši grešku
U suprotnom
Iskopiraj datoteku iz parametra 1 u direktorijum iz parametra 2
Kraj Ako bloka
Kraj Ako bloka
Kraj Ako bloka
Pogledaj sledeće info strane za više informacija (pod Linuksom, FreeBSD-om, MacOS-om, WSL-om na Windowsima 10 i 11, itd):
info bash if
info bash test
info coreutils echo
info coreutils cp
|
|
|
|
Poslao: 31 Maj 2022 21:02
|
offline
- Rastafarii

- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3736
- Gde živiš: 127.0.0.1
|
Blizu bocke, ali stativa. Da ne gresim dusu, i ja sam pisao ovakav kod (ispravan, da se razumemo) dok nismo uveli automatizovane testove. Tek onda shvatis koliko nestovani if-ovi prave sr... problem.
Potpuno isti kod, samo malo bolje organizovan:
Ako broj parametara nije jednak 2 -> onda napiši grešku i napusti izvrsavanje (return, exit, die...)
Ako prvi parametar nije datoteka -> onda napiši grešku i napusti izvrsavanje
Ako drugi parametar nije direktorijum -> onda napiši grešku i napusti izvrsavanje
Iskopiraj datoteku iz parametra 1 u direktorijum iz parametra 2
Broj testova za bocketov kod: 16
Broj testova za kod koji radi isto to, samo malo drugacije: 4
|
|
|
|
|
|
Poslao: 31 Maj 2022 22:23
|
offline
- Pridružio: 11 Okt 2014
- Poruke: 355
|
Hvala puno svima, ovo je neki pokušaj:
#!/bin/bash
if [[ $# -ne 2 ]]; then
echo "Broj argumenata treba biti 2";
exit 1;
else
if [[ ! -f $1 ]]; then
echo "Prvi argument nije datoteka";
exit 1;
fi
if [[ ! -d $2 ]]; then
echo "Drugi argument nije direktorij";
exit 1;
fi
cp $1 $2/
fi
|
|
|
|
Poslao: 31 Maj 2022 22:31
|
offline
- vasa.93

- Moderator foruma
- Pridružio: 17 Dec 2007
- Poruke: 14779
- Gde živiš: Niš
|
Kao što u primeru druga dva uslovna grananja nisi imao potrebu za else granom, tako nema potrebe za else granom nakon prvog uslovnog grananja. Baš ovo što kolege iznad govore.
Inače pokušaj deluje okej. Jel radi?
|
|
|
|
Poslao: 31 Maj 2022 22:59
|
offline
- Pridružio: 11 Okt 2014
- Poruke: 355
|
mislim da radi, ako sam dobro testirao, ali meni se ovaj stil pisanja nikako ne dopada, navikao sam da imam zagrade u if else kondicionalima (c,c++,javascript...), ovako je baš teško za razumeti
|
|
|
|
|
Poslao: 01 Jun 2022 08:48
|
offline
- Rastafarii

- Moderator foruma
- Pridružio: 22 Mar 2006
- Poruke: 3736
- Gde živiš: 127.0.0.1
|
@bocke
Ne pisem ja bash skripte, osim kad moram PHP mi je primarni jezik, a tu koristimo PHPUnit (uz mali synthetic sugar frejmvorka koji koristimo).
Ako se ne varam, broj ciklusa u oba slucaja je u potpunosti isti. Testova nije. Svaki if-else povecava broj scenarija koje moras da pokrijes 2x, a nest-ovana if-else grananja to rade eksponencijalno.
|
|
|
|