首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果-语句不正确输出

如果-语句不正确输出
EN

Unix & Linux用户
提问于 2018-05-07 09:35:10
回答 2查看 449关注 0票数 0

这是剧本。

代码语言:javascript
复制
#!/bin/bash

set -e
echo ""

declare -i value=00
unset optics_status

optics_status=$(curl -I xx.xx.xx.xx:4512 | grep 'X-Trace' | awk '{print $NF}' | rev |cut -c 1-3 | rev)


if [ $optics_status != $value ]; then
    echo "result is different means I am in if loop"
    echo "stats is $optics_status"
else
    echo "result is equal means I am in else loop"
    echo "stats is $optics_status"
fi

xx.xx.xx.xx是一个服务器IP,如果我单独运行curl命令,这就是我得到的输出。

代码语言:javascript
复制
user@machine-lap:~/Documents$ curl -I xx.xx.xx.xx:4512 | grep 'X-Trace' | awk '{print $NF}' | rev |cut -c 1-3 | rev
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0  8359    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
00
user@machine-lap:~/Documents$

正如您所看到的,我已经将value设置为00optics_status的输出也是00。因此,根据if循环,它应该回显i am in else loop,但它只是回显i am in if loop,我不明白为什么。

用简单的话来说,它呼应了if语句而不是else语句。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-05-07 10:24:45

如果希望value变量是00,不要在bash中将其声明为整数。使用declare -i将其声明为整数将提示shell将其计算为整数,而00的整数值为零。

注意,下面的代码将输出not same

代码语言:javascript
复制
declare -i value='00'
optics_status='00'

if [ "$optics_status" = "$value" ]; then
   echo 'same'
else
   echo 'not same'
fi

declare -i value='00'更改为value='00'将使其输出same

还请注意上面对变量展开的引用。

当然,您也可以考虑将两个变量的值提升为整数,方法是使用以下两种方法进行比较

代码语言:javascript
复制
if [ "$optics_status" -ne "$value" ]; then

代码语言:javascript
复制
if (( optics_status != value )); then

但是,这假设您知道$optics_value总是一个可以转换为整数的字符串(以及一个十进制整数,而不是一个八进制整数)。

票数 2
EN

Unix & Linux用户

发布于 2018-05-07 09:45:14

cut的S范围是包容性的,所以您已经取出了三个字符。其中一个字符可能是不可见的,例如空格、制表符或换行符。这使得字符串与值00不同。

通常,尝试set -o xtrace看看在运行脚本时会发生什么。还有使用更多的引号™

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/442266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档