- Verifying if a String Represents an Integer
Validating whether a provided string consists exclusively of numeric digits is a routine task in shell scripting. The following methods demonstrate how to perform this check using built-in features and external utilities.
Method A: Bash Regular Expression Matching
The \[\[ \]\] conditional construct supports the =~ operator, allowing direct regex evaluation against a varibale without spawning external processes.
local input_val="data_782"
if [[ "$input_val" =~ ^-?[0-9]+$ ]]; then
echo "Pure numeric"
else
echo "Contains non-digits"
fi
Method B: Parameter Expansion and Pattern Stripping
Bash parameter expansion can remove all non-numeric characters. Comparing the cleaned result against the original string confirms whether the input was already numeric.
target="report_2024"
stripped="${target//[^0-9]/}"
if [[ -n "$target" && "$target" == "$stripped" ]]; then
echo "Valid integer"
else
echo "Not a pure number"
fi
Method C: Arithmetic Context Evaluation
Placing a value in side an arithmetic context forces numeric evaluation. Non-numeric strings will trigger a runtime error, which can be suppressed to determine validity.
check_num="99102"
if (( check_num + 1 )) 2>/dev/null; then
echo "Numeric value detected"
else
echo "Invalid number format"
fi
Method D: Stream-Based Digit Filtering
Using standard text-processing tools to delete digits and checking the resulting output length offers a POSIX-compatible alternative.
data_stream="abc123def"
if [ -z "$(printf '%s' "$data_stream" | tr -d '[:digit:]')" ]; then
echo "All characters are digits"
else
echo "Contains alphabetic or special characters"
fi
- Detecting Empty or Zero-Length Values
Often, scripts need to verify whether a variable is unset, empty, or has a length of zero. The following techniques provide reliable ways to perform this check.
Method A: Built-in Null Test Operator
The -z flag in the test or \[ command returns true if the string length is zero.
record=""
if [ -z "$record" ]; then
echo "Field is empty"
else
echo "Field contains data"
fi
Method B: String Length via Parameter Expansion
The ${#var} syntax directly returns the character count of a variable. Comparing this against zero avoids subshell overhead.
entry="system_log"
if (( ${#entry} == 0 )); then
echo "Length is zero"
else
echo "Length exceeds zero"
fi
Method C: External Text Processing Utiliteis
Utilities like awk and wc can calculate string length when built-in operators are insufficient or when integrating with pipeline workflows.
line_data="cache_entry"
awk_length=$(printf '%s' "$line_data" | awk '{print length}')
wc_length=$(printf '%s' "$line_data" | wc -L)
if [[ "$awk_length" -eq 0 && "$wc_length" -eq 0 ]]; then
echo "Verified empty"
fi
- Enforcing Argument Count Requirements
When functions or scripts require a fixed number of inputs, validating positional parameters prevents unexpected behavior. The most straightforward approach is checking whether specific argument slots are populated.
process_inputs() {
# Verify if the second positional parameter exists
if [[ -z "${2:-}" ]]; then
echo "Error: Second argument is missing"
return 1
fi
echo "Proceeding with: $1 and $2"
}
# Execution examples
process_inputs "alpha" "beta" # Success
process_inputs "alpha" # Fails validation
For stricter validation, comparing the total argument count ($#) against the expected value provides a centralized check before accessing individual parameters.
required_args=3
if (( $# < required_args )); then
echo "Usage: script.sh arg1 arg2 arg3"
exit 1
fi