You’ve asked for input (e.g., from a user or a program) and to ensure security or data integrity you need to make sure you got what you asked for.
There are various ways to validate your input, depending on what the input is and how strict you need to be.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# cookbook filename: validate_using_case case $raw_input in *.company.com ) # Probably a local hostname ;; *.jpg ) # Probably a JPEG file ;; *.[jJ][pP][gG] ) # Probably a JPEG file, case insensitive ;; foo | bar ) # entered 'foo' or 'bar ;; [0-9][0-9][0-9] ) # A 3 digit number ;; [a-z][a-z][a-z][a-z] ) # A 4 lower-case char word ;; * ) # None of the above ;; esac |
Use a regular expression when pattern matching isn’t specific enough and you have bash version 3.0+
This example is looking for a three to six alphanumeric character filename with a .jpg extension (case sensitive):
For a larger and more detailed example, see the examples/scripts/shprompt in a recent bash tarball.
Note this was written by Chet Ramey, who maintains bash:
1 2 3 4 5 6 7 8 9 10 11 12 |
# shprompt -- give a prompt and get an answer satisfying certain criteria # # shprompt [-dDfFsy] prompt # s = prompt for string # f = prompt for filename # F = prompt for full pathname to a file or directory # d = prompt for a directory name # D = prompt for a full pathname to a directory # y = prompt for y or n answer # # Chet Ramey # chet@ins.CWRU.Edu |
For a similar example, see examples/scripts.noah/y_or_n_p.bash written circa 1993 by Noah Friedman and later converted to bash version 2 syntax by Chet Ramey.
Also in the examples see: ./functions/isnum.bash, ./functions/isnum2, and ./functions/isvalidip.