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