Diskuze: Problém se scriptem
Člen
Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Závorky jsem opravil hází to chybu Syntax Error: unexpected end of
file
Těžko říct proč ... podmínky mám zavřené pomocí fi a 50x jsem to
předělával a testoval a pořád nic takže fakt nevím.
#!bin/bash
UNAME=$(uname)
if [ $UNAME != Linux ];
then echo "Pracujete jinde nez v Linuxu"
echo ""
fi
echo "Skript vypise obsah adresare"
echo "****************************"
echo "Zadejte zpusob vypsani adresare: POUZIJTE PRO TO CISLICE 1 AZ 3"
echo "1.Strucne"
echo "2.Normalne"
echo "3.Uplne"
echo "Zadejte cestu k adresari a pote stiknete ENTER!"
read CESTA
#KOntrola cesty k adresari
while [ ! -d "$CESTA" ]
do
echo "Zadali jste chybnou cestu k adresari"
echo "Zadejte novou cestu k adresari"
read CESTA
echo "Zadejte jak chcete vypsat adresar"
read ODP
if [ $ODP = 1 ]
then
ls
else if [ $ODP = 2 ]
ls -l
else if [ $ODP = 3 ]
ll
fi
Tak hned na začátku v shebangu ti chybí počáteční lomítko v cestě
#!/bin/bash
Dále, nejdříve požádáš uživatele o zadání způsobu výpisu, ale hned vzápětí ho žádáš o cestu. Nejprve tedy nech uživatele zadat, jakým způsobem se to bude vypisovat - přesuň to read ODP hned za to echo "3. Uplne". Taky bys možná mohl doplnit nějakou kontrolu, jestli uživatel zadal opravdu číslo 1 - 3.
Ten cyklus pro načtení správné cesty, jdeš na to dobře ale zbytečně složitě zkus to třeba takhle:
while [ ! -d $CESTA ] || [ -z $CESTA ];
do
read -p "Zadejte cestu k adresari a pote stiknete ENTER!: " CESTA
if [ ! -d $CESTA ]; then
echo "Nezadali jste spravnou cestu. Znovu!"
fi
done
ta podmínka za while znamená 'pokud soubor daný proměnnou CESTA není existující adresář nebo pokud je proměnná CESTA prázdná'. Jelikož ve chvíli prvního provádění této podmínky je proměnná CESTA prázdná a bash má tu zvlášní vlastnost, že za prázdnou cestu v podmínce si dosadí aktuální adresář, tak pokud bys tam neměl ten test na prázdnost proměnné CESTA, tak by uživatel nedostal možnost zadat svoji cestu, prostě by se použil aktuální adresář.
Poté co načteš správnou cestu je čas vypsat obsah adresáře podle toho co předtím uživatel zadal do proměnné ODP. Místo těch ifů (u kterých ti pořád mimochodem chybí ty středníky) použij konstrukci case, je to taková obdobá switche z 'normálních' programovacích jazyků. Pak by to mohlo vypadat takto:
case "$ODP" in
1)
ls $CESTA
;;
2)
ls -l $CESTA
;;
3)
ls -la $CESTA
;;
esac
Všimni si, že jsem ti upravil ten poslední případ na ls -la. ll je Ubuntí výmysl, je to pouhý alias na ls a nikde jinde pokud vím defaultně není, takže když bys to pustil na jiné distribuci tak by ti to nefungovalo. ls -la vypíše vše včetně skrytých souborů, takže to odpovídá tomu popisu 'Uplne'. Taky si všimni těch dvou středníků za každým případem, ty tam být musí, označují konec případu. Obvyklejší programovací jazyky místo nich používají 'break'.
Opravil jsem ti ify podle vás. Popravdě jsem ten kod upravoval XY hodin a
pořád mi to házelo že unexpected token ´else´ takže ten case pomohl
aspon. Ale pořád po zadání volby a zadání adresy adresáře se vyhodí
chyba syntax error: unexpected end of file.
Doplnil jsem to otestování odpovědi pomocí příkazu until pokud by jste se
na to ještě podíval byl bych vám vděčný.
#!/bin/bash
UNAME=$(uname)
if [ $UNAME != Linux ];
then echo "Pracujete jinde nez v Linuxu"
echo ""
fi
echo "Skript vypise obsah adresare"
echo "****************************"
echo "Zadejte zpusob vypsani adresare: POUZIJTE PRO TO CISLICE 1 AZ 3"
echo "1.Strucne"
echo "2.Normalne"
echo "3.Uplne"
read ODP
echo "Zadejte cestu k adresari a pote stiknete ENTER!"
read CESTA
#Kontrola cesty k adresari
while [ ! -d "$CESTA" ];
do
echo "Zadali jste chybnou cestu k adresari"
echo "Zadejte novou cestu k adresari"
read CESTA
echo "Zadejte jak chcete vypsat adresar"
read ODP
#Vypsani
until [ $ODP <= 3 ];
do
echo "Zadali jste spatnou hodnotu. Zajdete te ji znovu!!!"
case "$ODP" in
1)
ls $CESTA
;;
2)
ls -l $CESTA
;;
3)
ls -la $CESTA
;;
esac
Ještě jsem vyměnil until za while a dal to nahoru at to má nějakou návaznost, ale zase to začalo psát: unexpected end of file na řádku 46 a řádek esac je řádek 45 takže chyba je na řádku, který je prázdný.
if [ $UNAME != Linux ];
then echo "Pracujete jinde nez v Linuxu"
echo ""
fi
echo "Skript vypise obsah adresare"
echo "****************************"
echo "Zadejte zpusob vypsani adresare: POUZIJTE PRO TO CISLICE 1 AZ 3"
echo "1.Strucne"
echo "2.Normalne"
echo "3.Uplne"
read ODP
while [ $ODP > "3" ];
do
echo "Zadali jste spatnou hodnotu. Zajdete te ji znovu!"
echo "Zadejte znovu cislo!"
read ODP
echo "Zadejte cestu k adresari a pote stiknete ENTER!"
read CESTA
#Kontrola cesty k adresari
while [ ! -d "$CESTA" ];
do
echo "Zadali jste chybnou cestu k adresari"
echo "Zadejte novou cestu k adresari"
read CESTA
read ODP
#Vypsani
case "$ODP" in
1)
ls $CESTA
;;
2)
ls -l $CESTA
;;
3)
ls -la $CESTA
;;
esac
Už jsem ho tam dopsal jak jsem psal měním ten kod opravdu pořád a snažím se přijít na chyby. Jen to tu vše nechci dívat at zas tak moc nespamuji. Ale díky za připomínku. Dopsal jsem done za podmínku ODP > 3 ale i při zadání hodnoty která je menší jak 3 ( 1 - 3 ) mi to vyhodí echo" Zadali jste špatnou hodnotu..." a jsem v cyklu
No řekl bych že už jsi se s tím potrápil dost
#!/bin/bash
UNAME=$(uname)
if [ $UNAME != Linux ];
then echo "Pracujete jinde nez v Linuxu"
echo ""
fi
echo "Skript vypise obsah adresare"
echo "****************************"
echo "Zadejte zpusob vypsani adresare: POUZIJTE PRO TO CISLICE 1 AZ 3"
echo "1.Strucne"
echo "2.Normalne"
echo "3.Uplne"
while (( ODP < 1 || ODP > 3 ));
do
read -p "Zadejte jak chcete vypsat adresar: " ODP
if (( ODP < 1 || ODP > 3 ));
then
echo "Prosim vyberte cislo 1 az 3!"
fi
done
while [ ! -d "$CESTA" ] || [ -z "$CESTA" ];
do
read -p "Zadejte cestu k adresari: " CESTA
if [ ! -d "$CESTA" ]; then
echo "Nezadal jste spravnou cestu. Znovu!"
fi
done
case "$ODP" in
1)
ls "$CESTA"
;;
2)
ls -l "$CESTA"
;;
3)
ls -la "$CESTA"
;;
esac
Pro porovnávání čísel se v Bashi hodí více ty dvojité kulaté závorky jak jsem je použili já u načítání ODP. Klasické > a < v hranatých závorkách porovnává stringy abecedně.
Zobrazeno 14 zpráv z 14.