How to
It's as easy as adding a shortcode with add_shortcode(). The following Plugin parses the input arguments using shortcode_atts(), which is quite similar to wp_parse_args() and cares about the shortcode defaults and your - user defined - arguments.
The Plugin
I guess the shortcode attributes and their defaults are quite self explanatory. As you can see, I showed you how to add classes, which you can also use to add other things to the wrapper. If you need to add things to the link itself, just do it like this:
'alt' => 'Download me" class="some-class-for-the-link'
To make it a "little safer", I run esc_attr() on each of the input arguments.
<?php
! defined( 'ABSPATH' ) AND exit;
/** Plugin Name: (#48078) »kaiser« Shortcode to link to a download */
function wpse48078_file_download( $attr )
{
$attr = array_map( 'esc_attr', $attr );
extract( shortcode_atts( array(
'href' => ''
,'target' => '_blank'
,'alt' => 'Download me'
,'title' => 'Download me'
,'text' => 'Download'
,'wrap' => 'div class="file-download"'
), $attr ), EXTR_SKIP );
$html = "<a href='{$href}' target='{$target}' alt='{$alt}' title='{$title}'>{$text}</a>";
$wrap AND $html = "<{$wrap}>{$html}</{$wrap}>";
return $html;
}
add_shortcode( 'file_download', 'wpse48078_file_download' );