#!/bin/bash lst=$1 error() { echo "$0:$@" exit 1 } useVar() { var=$1 val=$2 case "$var" in \$name) _name="$val";; \$union) echo 'union feature not yet implemented';; esac } setsrc() { mount_point=$1 dev=$2 case "$dev" in file://*) ln -s "${dev#file://}" "$mount_point";; ftp://*) ln -s "/$dev" "$mount_point";; *) error "I don't know which protocol to use for \`$dev'.";; esac } # parse files _name='oops' while read line; do if [ -n "$line" ]; then case "$line" in \#*) :;; # comment, do nothing \$*) # setting a variable var=${line%%=*} val=${line#$var=} useVar "$var" "$val" :;; *) # setting a source grp=`echo "$line" | cut -f 1` src=`echo "$line" | cut -f 2` mkdir -p "$_name" setsrc "$_name/$grp" "$src" :;; esac fi done < "$lst"