插件窝 干货文章 shell字符串比较、判断是否为数字入门案例

shell字符串比较、判断是否为数字入门案例

字符串 echo 数字 整数 786    来源:    2025-05-19

Shell字符串比较与数字判断入门案例

字符串比较基础

在Shell脚本中,字符串比较是常见的操作,以下是基本用法:

#!/bin/bash

str1="hello"
str2="world"

# 判断字符串是否相等
if [ "$str1" = "$str2" ]; then
    echo "字符串相等"
else
    echo "字符串不相等"
fi

# 判断字符串是否不相等
if [ "$str1" != "$str2" ]; then
    echo "字符串不相等"
fi

# 判断字符串长度是否为零(空字符串)
if [ -z "$str1" ]; then
    echo "字符串为空"
else
    echo "字符串不为空"
fi

# 判断字符串长度是否非零
if [ -n "$str1" ]; then
    echo "字符串不为空"
fi

数字判断方法

判断字符串是否为数字有多种方法:

方法1:使用正则表达式

#!/bin/bash

is_number() {
    local num=$1
    if [[ $num =~ ^[0-9]+$ ]]; then
        echo "$num 是整数"
        return 0
    elif [[ $num =~ ^[+-]?[0-9]+([.][0-9]+)?$ ]]; then
        echo "$num 是数字"
        return 0
    else
        echo "$num 不是数字"
        return 1
    fi
}

is_number "123"      # 是整数
is_number "12.3"     # 是数字
is_number "-12.3"    # 是数字
is_number "12a3"     # 不是数字

方法2:使用expr命令

#!/bin/bash

num="123"

if expr "$num" : '[0-9]\+$' >/dev/null; then
    echo "$num 是整数"
else
    echo "$num 不是整数"
fi

方法3:使用case语句

#!/bin/bash

check_number() {
    case $1 in
        ''|*[!0-9]*) echo "$1 不是整数"; return 1 ;;
        *) echo "$1 是整数"; return 0 ;;
    esac
}

check_number "456"
check_number "4a56"

数字比较案例

#!/bin/bash

a=10
b=20

# 数值比较需要使用 -eq, -ne, -gt, -ge, -lt, -le
if [ $a -eq $b ]; then
    echo "a 等于 b"
elif [ $a -gt $b ]; then
    echo "a 大于 b"
else
    echo "a 小于 b"
fi

# 也可以使用双括号进行更直观的比较
if (( a == b )); then
    echo "a 等于 b"
elif (( a > b )); then
    echo "a 大于 b"
else
    echo "a 小于 b"
fi

综合案例:用户输入验证

#!/bin/bash

read -p "请输入一个数字: " input

# 检查是否为空
if [ -z "$input" ]; then
    echo "错误:输入不能为空"
    exit 1
fi

# 检查是否为数字
if ! [[ "$input" =~ ^[0-9]+$ ]]; then
    echo "错误:请输入有效的整数"
    exit 1
fi

# 检查数字范围
if [ "$input" -lt 1 ] || [ "$input" -gt 100 ]; then
    echo "错误:数字必须在1-100之间"
    exit 1
fi

echo "输入有效: $input"

注意事项

  1. 在比较字符串时,变量要用双引号括起来,防止空变量或包含空格的情况
  2. 数值比较使用 -eq, -ne 等操作符,字符串比较使用 =, !=
  3. [[ ]][ ] 更强大,支持正则匹配等高级功能
  4. 在双括号 (( )) 中进行数值比较时,可以直接使用数学符号 ==, >, <