In a bash script, how do I sanitize user input?

前端 未结 6 1085
抹茶落季
抹茶落季 2020-12-24 05:01

I\'m looking for the best way to take a simple input:

echo -n \"Enter a string here: \"
read -e STRING

and clean it up by removing non-alph

6条回答
  •  不思量自难忘°
    2020-12-24 06:06

    As dj_segfault points out, the shell can do most of this for you. Looks like you'll have to fall back on something external for lower-casing the string, though. For this you have many options, like the perl one-liners above, etc., but I think tr is probably the simplest.

    # first, strip underscores
    CLEAN=${STRING//_/}
    # next, replace spaces with underscores
    CLEAN=${CLEAN// /_}
    # now, clean out anything that's not alphanumeric or an underscore
    CLEAN=${CLEAN//[^a-zA-Z0-9_]/}
    # finally, lowercase with TR
    CLEAN=`echo -n $CLEAN | tr A-Z a-z`
    

    The order here is somewhat important. We want to get rid of underscores, plus replace spaces with underscores, so we have to be sure to strip underscores first. By waiting to pass things to tr until the end, we know we have only alphanumeric and underscores, and we can be sure we have no spaces, so we don't have to worry about special characters being interpreted by the shell.

提交回复
热议问题