Why complicate things?
file=exists_and_writeable
if ! [ -e "$file" ] ; then
touch "$file"
fi
if ! [ -w "$file" ] ; then
printf 'cannot write to %s\n' "$file"
exit 1
fi
Or, more concisely,
{ [ -e "$file" ] || touch "$file"; } && \
! [ -w "$file" ] && printf 'cannot write to %s' "$file" && exit 1