Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: webhope 15. 03. 2010, 11:36:07
-
Zdravím,
nedaří se mi rozjet tenhle kód:
find_files=$(find $dir_backups/$disk_dir/$subdir -type f -name *.dd)
if [ "$find_files" == "" ]; then
if [[ "$subdir" =~ "${basic}" ]]; then
$subdir=${$subdir//basic/drivers} # replace basic for drivers - bude hledat v druhém adresáři
else if [[ "$subdir" =~ "${drivers}" ]]; then
$subdir=${$subdir//drivers/basic} # replace drivers for basic - bude hledat v druhém adresáři
fi;
fi;
fi;
A dává to hlášku:
řádek 301: $subdir=${$subdir//'basic'/'drivers'}: chybná substituce
Ve stringu $subdir se snažím zaměnit řetězec 'basic' za 'drivers'. Ovšem ani bez uvozovek, jak je to v návodu, to nefunguje.
A taky se chci zeptat, jestli ta struktura if není zbytečně složitá, protože mě připadá že je, a že ny to chtělo nějak zjednodušit.
Díky za radu
-
Uvnitř ${} už nemá být dolar, takže nějak takto:
${subdir//basic/drivers}
-
Ještě ten script nejede jak by měl a souvisí to s tím find
find_files=$(find $dir_backups/$disk_dir/$subdir -type f -name *.dd -printf "%P\n")
echo $find_files
read;
if [ "$find_files" == "" ]; then
echo $find_files
read;
if [[ "$subdir" =~ "${basic}" ]]; then
subdir=${subdir//basic/drivers} # replace basic for drivers - bude hledat v druhém adresáři
else
if [[ "$subdir" =~ "${drivers}" ]]; then
subdir=${subdir//drivers/basic} # replace drivers for basic - bude hledat v druhém adresáři
fi;
fi;
fi;
echo $subdir
read;
Jde o to, že find nenalézá žádný soubor, což je správně, protože tam žádný soubor není. Problém je ale že mi to neprojde tou podmínkou:
if [ "$find_files" == "" ]; then
to asi znamená, že $find_files není tak docela prázdný řetězec. jak mám nadefinovat podmínku, aby to prošlo testem pokud nenajde řádný soubor? Díky
-
find_files=$(find "$dir_backups/$disk_dir/$subdir" -type f -name "*.dd" -printf "%P\n")
Chybí tam dva páry uvozovek. Po doplnění to může začít fungovat. Hlavně tam chybí uvozovky kolem "*.dd".
-
Snad jsem ty chyby vychytal:
find_files=$(find "$dir_backups/$disk_dir/$subdir" -type f -name "*.dd" -printf "%P\n")
if [ "$find_files" == "" ]; then
if [[ "$subdir" =~ "basic" ]]; then
subdir="${subdir//basic/drivers}" # replace basic for drivers - bude hledat v druhém adresáři
elif [[ "$subdir" =~ "drivers" ]]; then
subdir="${subdir//drivers/basic}" # replace drivers for basic - bude hledat v druhém adresáři
fi;
fi;
-
Díky, jakmile se dostanu do linuxu tak to otestuju. Nicméně, proč tam ty uvozovky musí být?
-
Díky, jakmile se dostanu do linuxu tak to otestuju. Nicméně, proč tam ty uvozovky musí být?
Všude být nemusí, ale časem si zvykneš je dávat všude tam, kde by byť i jen teoreticky mohla vniknout jakákoli mezera nebo enter - třeba i v názvu souboru.
"*.dd" - uvozovky zabrání rozbalení "*" před spuštěním příkazu find.
-
Tak už jsem to vyzkoušel a to elif to je přesně to co jsem potřeboval, aby se to zjednodušilo. Díky