If I enter this shortcode:
[download url="http://example.com"]Download[/download]
it works fine. But you have to enter the link text as content yourself. You might have missed that, the way I read your question.
Your [demo]
-Shortcode throughs an error. To see this, you need to have WP_DEBUG set to true:
Notice: Undefined variable: func in \wp-includes\shortcodes.php on line 92
This is because, your code says
add_shortcode('demo'.'demo_button');
This in fact creates an shortcode like [demodemo_button]
with no function attached. Use a comma instead the point:
add_shortcode('demo','demo_button');
If you do so, it works fine too. But again, you have to add the link text as content, like here:
[demo url="http://example.com"]Linktext[/demo]
If you want a fixed link text, you should have a look into this code snippet:
function download_button($atts, $content = null) {
extract( shortcode_atts( array(
'url' => '#'
), $atts ) );
return '<a href="'.$url.'" class="btn btn-default btn-download">Download</a>';
}