При проверке результата grep -q
вы хотите проверить $?
, а не вывод grep, который будет пустым
at=$(echo "$1" | grep -q "@")
if [ $? -ne 0 ]; then ...
или просто
if echo "$1" | grep -q "@"; then ...
или, более коротко
if grep -q "@" <<< "$1"; then ...
или без вызова grep:
if [[ "$1" == *@* ]]; then ...
или
case "$1" in
*@*) echo "match" ;;
*) echo "no match" ;;
esac