2015-04-17 23:38 GMT+02:00 Maarten de Vries <maarten@xxxxxxxxx>: > > On 04/17/2015 10:57 PM, Christian Demsar wrote: >> >> I'll try to use the globbing. That's new to me. >> >> Is there anything else you saw that was odd? This is the first non-trivial >> script I've written (recursion in bash!), so I'm not sure about the >> placement of the functions, etc. > > > At a second look, this check might also be a problem: > > if [ $zipFiles ]; then > > To be honest I'm not sure what bash will do with that when $zipFiles is an > array. The check isn't really needed with an array since looping over an > empty array won't do anything anyway. When you do need it you can get the > number of elements in an array in bash with ${#array[@]} and test on that. > Knowing how bash arrays work can be very useful in writing effective bash > scripts. If you haven't yet I would recommend reading up on their specifics. > > In bash (and some other shells), you might also prefer [[ ]] for tests over > [ ]. It is somewhat less confusing in some situations, but be aware that it > is not POSIX. Then again, arrays aren't POSIX either. Just be sure to use a > proper bash shebang and not #!/bin/sh when you're using bash features (you > already did this, but it's important so I'm emphasizing ;) ). > > I also saw that you check for read permissions before trying to extract the > zip file. It doesn't hurt, but it's generally better to just try doing what > you want to do and detect errors by checking the exit code of programs you > run. Otherwise you will likely forget to check for some uncommon error > conditions. In some cases it can even happen that the error conditions are > not present when you test for them, but they are later when you try to > extract the file (or do something else with it) because something or someone > changed something in between. > >> Is there a way to declare the functions like in C? I couldn't figure that >> out from the section on functions in Advanced Bash Scripting. > > If you mean first declare a function and define it later: no, you can't do > that in bash. On the other hand, you can use a function B the body of > function A before B is defined, as long as you don't call A until B is > defined. So in general it doesn't really matter. For example, this will work > fine: > > foo() { > bar > } > > bar() { > echo "Hello world!" > } > > foo > > > I hope my comments are useful. If not, feel free to ignore them ;) > > Regards, > Maarten Thank you all for help. The script works, it can unzip archives recursively. -- Regards from Pal