Mount different remote systems
Your functions shouldn't depend on variables but use specified
parameters. You always specified variables before calling your function instead of just specifying them as parameters, e.g:

DIR=Box1
Host=192.168.1.100
mnt


but you can easily write it as

mnt Box1 192.168.1.100


I would also only parse your command line arguments in one place and create
a dedicated function for determine the appropriate ip address for your hosts.

I would also remove the ls call from your mnt function as mnt doesn't do what the name suggests. But this is a rather minor issue and I didn't change it in my code.

#!/bin/sh
# mount boxes by SSHFS

usage () {
    cat &lt;&lt;EOF
sshmnt -[c,s,u,h]
      -c Box1
      -s Box2
      -u unmount
      -h print this message

EOF
}

mnt(){

    if [ $# -ne 3 ] ; then
       echo "Wrong parameters for mnt - host dir port" &gt;&amp;2
       return 1
    fi

    host="$1"
    dir="$2"
    port="$3"
    sshfs jason@"$host":/home/jason /media/"$dir" \
    -C -p "$port" \
    -o reconnect,IdentityFile=/home/jason/.ssh/id_rsa \
    &amp;&amp; ls /media/"$dir"
}

umnt(){
    dir="$1"
    fusermount -u /media/"$dir"
}

get_host(){
    # check if on LAN
    lan="$(ip addr | grep .102/)"

    if [ -z "$lan" ] ; then
        echo XXX.XXX.XXX.XXX
        return 0
    fi

    case "$1" in
        Box1) echo 192.168.1.100 ;;
        Box2) echo 192.168.1.200 ;;
        *) echo "Unknown Parameter" &gt;&amp;2 &amp;&amp; return 1 ;;
    esac
}

case "$1" in
    -c) mnt $(get_host Box1) Box1 port ;;
    -s) mnt $(get_host Box2) Box2 port ;;
    -u)
        mount | grep Box1 &amp;&amp; umnt Box1
        mount | grep Box2 &amp;&amp; umnt Box2
        ;;
     *) usage &amp;&amp; exit 1;;
esac


Another suggestion is to get rid of all your hard coded paths and texts like, /media/, /home/jason/ and jason and replace them with variables, e.g:

MOUNT_PREFIX=/media/
SSH_KEY=/home/jason/.ssh/id_rsa
MOUNT_SOURCE=/home/jason


and just specify the user for your hosts in ~/.ssh/config