在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
判断字符串是否为数字有多种方法:
#!/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" # 不是数字
#!/bin/bash
num="123"
if expr "$num" : '[0-9]\+$' >/dev/null; then
echo "$num 是整数"
else
echo "$num 不是整数"
fi
#!/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"
-eq
, -ne
等操作符,字符串比较使用 =
, !=
[[ ]]
比 [ ]
更强大,支持正则匹配等高级功能(( ))
中进行数值比较时,可以直接使用数学符号 ==
, >
, <
等