Bash脚本实现两列数值比较及结果输出需求求助
解决Bash中比较$SIZE_TO_SOCKET变量中A和B数值的问题
我来帮你补全并优化这段Bash代码,刚好能实现你要的功能。首先得明确$SIZE_TO_SOCKET的格式——你说示例输出是A 256 B 256,可能是一行包含两组键值对,也可能是每行一组(比如A 256和B 256各占一行),我两种情况都给你处理方案:
情况1:$SIZE_TO_SOCKET是每行一组键值对(更通用的场景)
这种情况适合变量里有多行数据,我们用循环遍历每行提取值:
# 先初始化存储A、B数值的变量 SOCKET_A="" SOCKET_B="" # 遍历$SIZE_TO_SOCKET的每一行 while IFS= read -r line; do # 用awk提取当前行的socket名称和对应数值 SOCKET=$(echo "$line" | awk '{print $1}') SIZE=$(echo "$line" | awk '{print $2}') # 根据socket名称把数值存入对应变量 if [[ "$SOCKET" == "A" ]]; then SOCKET_A="$SIZE" elif [[ "$SOCKET" == "B" ]]; then SOCKET_B="$SIZE" fi done <<< "$SIZE_TO_SOCKET" # 先检查是否A、B的数值都获取到了,避免缺失值导致错误 if [[ -z "$SOCKET_A" || -z "$SOCKET_B" ]]; then echo "Error: Missing value for A or B" exit 1 fi # 比较数值并输出结果(用-eq做数值比较,比字符串比较更准确) if [[ "$SOCKET_A" -eq "$SOCKET_B" ]]; then echo "Success: A($SOCKET_A) is equal to B($SOCKET_B)" else echo "Error: A($SOCKET_A) is not equal to B($SOCKET_B)" fi
情况2:$SIZE_TO_SOCKET是一行包含两组键值对(你的示例场景)
如果变量内容就是一行A 256 B 256,那不用循环,直接提取对应字段更简单:
# 直接提取A和B对应的数值 SOCKET_A=$(echo "$SIZE_TO_SOCKET" | awk '{print $2}') SOCKET_B=$(echo "$SIZE_TO_SOCKET" | awk '{print $4}') # 数值比较并输出结果 if [[ "$SOCKET_A" -eq "$SOCKET_B" ]]; then echo "Success: A($SOCKET_A) is equal to B($SOCKET_B)" else echo "Error: A($SOCKET_A) is not equal to B($SOCKET_B)" fi
关键细节说明
- 用
-eq做数值比较:如果用==是字符串比较,比如0256和256字符串不相等,但数值是相等的,所以用-eq更贴合你的需求。 - 空值检查:在循环方案里加了空值判断,防止
$SIZE_TO_SOCKET里缺少A或B的条目导致后续比较出错。 IFS= read -r line:IFS=能保留行首或行尾的空格,-r禁止反斜杠转义,确保读取每行内容的准确性。
内容的提问来源于stack exchange,提问作者askpython
相关产品推荐
相关产品推荐

