Bash Bracket
bracket() {
    local _s=$1
    local -a _stack=()
    local _i _c
    for ((_i = 0; _i < ${#_s}; _i++)); do
        _c=${_s:_i:1}
        case "$_c" in
            ')')
                if (( ${#_stack[@]} == 0 )) || [[ "${_stack[-1]}" != "(" ]]; then
                    echo 0; return
                fi
                unset '_stack[-1]'
                ;;
            ']')
                if (( ${#_stack[@]} == 0 )) || [[ "${_stack[-1]}" != "[" ]]; then
                    echo 0; return
                fi
                unset '_stack[-1]'
                ;;
            '}')
                if (( ${#_stack[@]} == 0 )) || [[ "${_stack[-1]}" != "{" ]]; then
                    echo 0; return
                fi
                unset '_stack[-1]'
                ;;
            *)
                _stack+=("$_c")
                ;;
        esac
    done
    if (( ${#_stack[@]} == 0 )); then echo 1; else echo 0; fi
}

This uses a simple stack approach: open brackets go in, matching closing brackets pop them out.