• Shell下syntax error: operand expected (error token is “-”)


    在这个监控实时网口速率的脚本中,第21,22行存在错误:

    #!/bin/bash
    #Modified by lifei4@datangmobile.cn
    echo ===DTmobile NetSpeedMonitor===
    sleep 1
    echo loading...
    sleep 1
    
    ethn=$1
     
    while true
    do
      RXpre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')
      TXpre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}')
      sleep 1
      RXnext=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')
      TXnext=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}')
     
      clear
      echo -e "			  RX 		   TX  			 TIME"
     
      RX=$((${RXnext}-${RXpre}))
      TX=$((${TXnext}-${TXpre}))
     
      if [ $RX -lt 1024 ];then
        RX="${RX}B/s"
      elif [ $RX -gt 1048576 ];then
        RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')
      else
        RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
      fi
     
      if [ $TX -lt 1024 ];then
        TX="${TX}B/s"
      elif [[ $TX -gt 1048576 ]];then
        TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
      else
        TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
      fi
     
      echo -e "$ethn 	 $RX   $TX   			 `date +%k:%M:%S` "
     
    done
    

      

    修改后的文件

    #!/bin/bash
    #Modified by lifei4@datangmobile.cn
    echo ===DTmobile NetSpeedMonitor===
    sleep 1
    echo loading...
    sleep 1
    
    ethn=$1
     
    while true
    do
      RXpre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')
      TXpre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}')
      sleep 1
      RXnext=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')
      TXnext=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}')
     
      clear
      echo -e "			  RX 		   TX  			 TIME"
     
      RX=$((RXnext-RXpre))
      TX=$((TXnext-TXpre))
     
      if [ $RX -lt 1024 ];then
        RX="${RX}B/s"
      elif [ $RX -gt 1048576 ];then
        RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')
      else
        RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
      fi
     
      if [ $TX -lt 1024 ];then
        TX="${TX}B/s"
      elif [[ $TX -gt 1048576 ]];then
        TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
      else
        TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
      fi
     
      echo -e "$ethn 	 $RX   $TX   			 `date +%k:%M:%S` "
     
    done
    

      

    原因为,在$取值的时候,括号里面只需要跟变量即可(变量可自行进行计算),不需要对括号内进行运算的变量在进行取值操作。

      RX=$((${RXnext}-${RXpre}))
      TX=$((${TXnext}-${TXpre}))
      
      修改后:
      
      RX=$((RXnext-RXpre))
      TX=$((TXnext-TXpre))  
    

      

    然后就没有然后了~~~

  • 相关阅读:
    RT-Thread can
    scons自动化构建工具
    Android 数据库 SQLiteOpenHelper
    请确保二进制储存在指定的路径中,或者调试他以检查该二进制或相关的DLL文件
    攻防世界misc新手区前三题
    基于session对象实现简单的购物车应用
    MS Excel中的内部日期处理方法
    如何实现对指定日期进行增减日期操作结果的输出
    2020前端大厂最新面试题,这一波我是用“身子换来的”
    字节、拼多多前端面经!
  • 原文地址:https://www.cnblogs.com/phyger/p/9525469.html
Copyright © 2020-2023  润新知