Linux shell scripting - testing for numeric argument
I've been tinkering on the problem of checking if an argument is numeric or not inside shell scripts for quite a time already. I searched the internet for a way to test if a variable in a bash script is consisting only of digits but haven't found a clear solution yet. Either that or I'm unable to bring up the right search terms. The main problem is that it has to be cross-Unix-compatible (Linux, Solaris, AIX).
A few weeks ago I completed an in-corporate eLearning course about Unix Shell Scripting. This course also contained lessons about basic Unix commands like sed and awk.
Today this tiny problem struck at me again and I tried to bring in my new knowledge from the course. What I came up with is:
#!/bin/bash # check first argument number=$1 # test if argument present, then compare original string to the string without non-digit characters # if string is the same, it only consist of digits if [ ! -z "$number" -a "$number" = "$(echo $number | sed 's/[^[:digit:]]//g')" ] then echo "Argument is full numeric" else echo "Argument is not full numeric" fi
I tested it and it seems to work on all the platforms I need it. I don't like the inline call of sed but for the sake of compatibility I'll settle with that.
Perhaps I'll find an easier solution in the future but now that's not a priority anymore...