这是剧本。
#!/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"
fixx.xx.xx.xx是一个服务器IP,如果我单独运行curl命令,这就是我得到的输出。
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设置为00,optics_status的输出也是00。因此,根据if循环,它应该回显i am in else loop,但它只是回显i am in if loop,我不明白为什么。
用简单的话来说,它呼应了if语句而不是else语句。
发布于 2018-05-07 10:24:45
如果希望value变量是00,不要在bash中将其声明为整数。使用declare -i将其声明为整数将提示shell将其计算为整数,而00的整数值为零。
注意,下面的代码将输出not same:
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。
还请注意上面对变量展开的引用。
当然,您也可以考虑将两个变量的值提升为整数,方法是使用以下两种方法进行比较
if [ "$optics_status" -ne "$value" ]; then或
if (( optics_status != value )); then但是,这假设您知道$optics_value总是一个可以转换为整数的字符串(以及一个十进制整数,而不是一个八进制整数)。
发布于 2018-05-07 09:45:14
cut的S范围是包容性的,所以您已经取出了三个字符。其中一个字符可能是不可见的,例如空格、制表符或换行符。这使得字符串与值00不同。
通常,尝试set -o xtrace看看在运行脚本时会发生什么。还有使用更多的引号™!
https://unix.stackexchange.com/questions/442266
复制相似问题