The easiest method for reading arguments can be described as follows;
Each argument is referenced and parsed by the $IFS
or currently defined internal file separator
. The default character is a space.
For example, take the following; # ./script.sh arg1 arg2
The argument list in that example is arg1 = $1
and arg2 = $2
which can be rewritten as arg1 arg2 = $@
.
Another note is the use of a list of logs, how often does that change? My assumption is daily. Why not use the directory output as the array of your iterative loop? For example;
for i in $(ls /path/to/logs); do
./workaround.sh $i;
done
Or better yet, move on to use of functions
in bash to eliminate clutter.
function process_file()
{
# transfer file code/command
}
function iterate_dir()
{
local -a dir=($(ls $1))
for file in ${dir[@]}; do
process_file $file
done
}
iterate_dir /path/to/log/for
While these are merely suggestions to improve your shell scripting knowledge I must know if there is an error you are getting and would also need to know the details of each scripts code and or functionality. Making the use of the -x
argument helps debug scripting as well.
If you are simply transferring logs you may wish to do away with the scripts all together and make use of rsync
, rsyslog
or syslog
as they all are much more suited for the task in question.