You need quotes both in the invocation and in the script's code, as otherwise many of your punctuation characters will be interpreted by either the command-line shell or the script's interpreting shell. Therefore, you'd want this code:
#!/bin/sh
input="${1}"
echo "${input}"
and to invoke as
./script.sh 'Af)}R"}$;AF(@}#@]-'
or, by escaping rather than quoting, as
./script.sh Af\)\}R\"\}\$\;AF\(@\}\#@]-
However, in the comments to this question, you noted
I am trying to read in some text as part of a bigger program and I can't ask the end user to enter strings in ''
Presumably, if the end user can't be asked to quote, they also cannot be asked to escape. In this case, you probably don't want this on the command line. Instead, consider using standard input:
#!/bin/sh
IFS= read -r input
echo "${input}"
and invoke as either
./script.sh (after which you type in that code and hit Enter)
or as
/path/to/other/program |./script.sh (if that other program issues the code on standard output).
You can test this by quoting the code to echo: echo 'Af)}R"}$;AF(@}#@]-' |./script.sh
(I assume this makes sense in a non-simplified version of your code. As it stands here, it doesn't do anything, just taking the input from the first command's standard output and then reporting it right back to standard output.)
)is a special character in sh. You can't use it literally, it needs single quotes or a backslash.echo "$input"-- using braces is not the same as using quotes.;will be interpreted as the end of your command if it isn't escaped. Why is placing the argument in single quotes not an option?''