Files
mastering-unix-ss/chapter1/test_string.ksh
Fabio Scotto di Santolo 4cc88d2f6e initial commit
2020-07-28 19:28:25 +02:00

181 lines
4.8 KiB
Bash
Executable File

#!/bin/ksh
#
# SCRIPT: test_string.ksh
# AUTHOR: Randy Michael
# REV: 1.0.D - Used for developement
# DATE: 10/15/2007
# PLATFORM: Not Platform Dependent
#
# PURPOSE: This script is used to test a character
# string, or variable, for its composition.
# Examples include numeric, lowercase or uppercase
# characters, alpha-numeric characters, and IP address.
#
# REV LIST:
#
#
# set -x # Uncomment to debug this script
# set -n # Uncomment to verify syntax without any execution.
# # REMEMBER: Put the comment back or the script will
# # NOT EXECUTE!
#
####################################################
############## DEFINE FUNCTIONS HERE ###############
####################################################
test_string ()
{
# This function tests a character string
# Must have one argument ($1)
if (( $# != 1 ))
then
# This error would be a programming error
print "ERROR: $(basename $0) requires one argument"
return 1
fi
# Assign arg1 to the variable --> STRING
STRING=$1
# This is where the string test begins
case $STRING in
+([0-9]).+([0-9]).+([0-9]).+([0-9]))
# Testing for an IP address - valid and invalid
INVALID=FALSE
# Separate the integer portions of the "IP" address
# and test to ensure that nothing is greater than 255
# or it is an invalid IP address.
for i in $(echo $STRING | awk -F . '{print $1, $2, $3, $4}')
do
if (( i > 255 ))
then
INVALID=TRUE
fi
done
case $INVALID in
TRUE) print 'INVALID_IP_ADDRESS'
;;
FALSE) print 'VALID_IP_ADDRESS'
;;
esac
;;
+([0-1])) # Testing for 0-1 only
print 'BINARY_OR_POSITIVE_INTEGER'
;;
+([0-7])) # Testing for 0-7 only
print 'OCTAL_OR_POSITIVE_INTEGER'
;;
+([0-9])) # Check for an integer
print 'INTEGER'
;;
+([-0-9])) # Check for a negative whole number
print 'NEGATIVE_WHOLE_NUMBER'
;;
+([0-9]|[.][0-9]))
# Check for a positive floating point number
print 'POSITIVE_FLOATING_POINT'
;;
+(+[0-9][.][0-9]))
# Check for a positive floating point number
# with a + prefix
print 'POSITIVE_FLOATING_POINT'
;;
+(-[0-9][.][0-9]))
# Check for a negative floating point number
print 'NEGATIVE_FLOATING_POINT'
;;
+([-.0-9]))
# Check for a negative floating point number
print 'NEGATIVE_FLOATING_POINT'
;;
+([+.0-9]))
# Check for a positive floating point number
print 'POSITIVE_FLOATING_POINT'
;;
+([a-f])) # Test for hexidecimal or all lowercase characters
print 'HEXIDECIMAL_OR_ALL_LOWERCASE'
;;
+([a-f]|[0-9])) # Test for hexidecimal or all lowercase characters
print 'HEXIDECIMAL_OR_ALL_LOWERCASE_ALPHANUMERIC'
;;
+([A-F])) # Test for hexidecimal or all uppercase characters
print 'HEXIDECIMAL_OR_ALL_UPPERCASE'
;;
+([A-F]|[0-9])) # Test for hexidecimal or all uppercase characters
print 'HEXIDECIMAL_OR_ALL_UPPERCASE_ALPHANUMERIC'
;;
+([a-f]|[A-F]))
# Testing for hexidecimal or mixed-case characters
print 'HEXIDECIMAL_OR_MIXED_CASE'
;;
+([a-f]|[A-F]|[0-9]))
# Testing for hexidecimal/alpha-numeric strings only
print 'HEXIDECIMAL_OR_MIXED_CASE_ALPHANUMERIC'
;;
+([a-z])) # Testing for all lowercase characters only
print 'ALL_LOWERCASE'
;;
+([A-Z])) # Testing for all uppercase numbers only
print 'ALL_UPPERCASE'
;;
+([a-z]|[A-Z]))
# Testing for mixed case alpha strings only
print 'MIXED_CASE'
;;
+([a-z]|[A-Z]|[0-9]))
# Testing for any alpha-numeric string only
print 'ALPHA-NUMERIC'
;;
*) # None of the tests matched the string coposition
print 'INVALID_STRING_COMPOSITION'
;;
esac
}
####################################################
usage ()
{
echo "\nERROR: Please supply one character string or variable\n"
echo "USAGE: $THIS_SCRIPT {character string or variable}\n"
}
####################################################
############# BEGINNING OF MAIN ####################
####################################################
# Query the system for the name of this shell script.
# This is used for the "usage" function.
THIS_SCRIPT=$(basename $0)
# Check for exactly one command-line argument
if (( $# != 1 ))
then
usage
exit 1
fi
# Everything looks okay if we got here. Assign the
# single command-line argument to the variable "STRING"
STRING=$1
# Call the "test_string" function to test the composition
# of the character string stored in the $STRING variable.
test_string $STRING
# End of script