检查SVN本地代码是否需要更新

  1. check_code_change()
  2. {
  3. FW_PATH=$1
  4. echo "checking if $FW_PATH has been changed"
  5. cd $FW_PATH
  6. revision=$(svn info |grep "Last Changed Rev" |awk '{print $4}')
  7. echo "the revision is $revision"
  8. URL=$(svn info |grep "^URL:" |awk '{print $2}')
  9. echo "the url is $URL"
  10. svnRevision=$(svn info $URL |grep "Last Changed Rev:" |awk '{print $4}')
  11. echo "the revision in svn is $svnRevision"
  12. if [[ $revision < $svnRevision ]] ; then
  13. return 1
  14. else
  15. return 0
  16. fi
  17. }

判断某扩展名文件是否存在

判断某个确定文件名的文件是否存在时可以用-e,但不能接通配符。
if [[ -e ./base/*.f1img ]]; then
这种写法在存在多个符合条件的文件时会报错。
if [[ -n $(ls ./base/*.f1img) ]]; then
这种写法在不存在符合条件的文件时会报错。
if ls ./base/*.f1img >/dev/null 2>&1; then
这种写法在符合条件的文件存在或不存在,1个或多个时都没问题。需要注意到是if后面没有中括号。
中括号[的本质是test,用于条件判断。if不加中括号[用于真假判断,后面直接跟命令,判断的是命令执行结果是否成功。如果成功返回值为0则为真,如果执行失败返回值为非0则为假。
该命令中先用ls尝试去列出./base/*.f1img,然后将标准输入和标准输出都重定向到/dev/null,也就是说不管文件存在还是不存在,ls都什么不打印。if后面没有中括号[,所以判断的不是ls的输出内容,而是ls命令的执行结果。如果文件存在,ls执行成功返回值为0,则if判断为真。如果没有符合条件的文件存在,则ls命令执行失败,返回值为2,if判断为假。

比较两个文件是否相同

  1. #/bin/bash
  2. file1=/tmp/aa
  3. file2=/tmp/bb
  4. diff $file1 $file2 > /dev/null
  5. if [ $? == 0 ]; then
  6. echo "they are same"
  7. else
  8. echo "they are different"
  9. fi

检测文件列表是否有变化

  1. ls *.jar -1 > manifest.tmp
  2. diff manifest.tmp META-INF/IPC_MANIFEST.MF >/dev/null 2>&1
  3. if [[ $? != 0 ]]; then
  4. cp manifest.tmp META-INF/IPC_MANIFEST.MF
  5. rm -f IPC_MANIFEST.MF.sig
  6. PKISign -jar $MODULE_HOME/META-INF/IPC_MANIFEST.MF
  7. fi
  8. rm manifest.tmp

不显示输出

在命令后加>/dev/null 2>&1
/dev/null :代表空设备文件
> :代表重定向到哪里,例如:echo “123” > /home/123.txt
1 :表示stdout标准输出,系统默认值是1,所以”>/dev/null“等同于”1>/dev/null
2 :表示stderr标准错误
& :表示等同于的意思,2>&1,表示2的输出重定向等同于1
1 > /dev/null 2>&1 语句含义:
1 > /dev/null : 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

将log文件限制在一定行数内

  1. #!/bin/sh
  2. LOG_FILE=/var/log/messages
  3. TMP_FILE=/var/log/messages.tmp
  4. LINE_LIMIT=10000
  5. if [[ -e $LOG_FILE ]]; then
  6. #check line number of the log file
  7. line_num=$(wc -l $LOG_FILE | awk '{print $1}')
  8. #if exceed line limit, only keep the latest lines
  9. if [[ $line_num -gt $LINE_LIMIT ]]; then
  10. tail -n $LINE_LIMIT $LOG_FILE > $TMP_FILE
  11. rm $LOG_FILE
  12. mv $TMP_FILE $LOG_FILE
  13. fi
  14. fi

检查网络联通性

  1. HOST_IP=192.168.1.101
  2. CheckConnectivity()
  3. {
  4. echo "Checking network connectivity..."
  5. ping -c 10 -o $HOST_IP
  6. if [[ $? == 0 ]]; then
  7. echo "Network is available now!"
  8. return 0
  9. else
  10. echo "The network is unavailable now! try again!"
  11. return 1
  12. fi
  13. }

设置IP地址

  1. SetLocalIP()
  2. {
  3. validIPaddr=0
  4. echo "Please set IP address for this device"
  5. echo -n "if leave it blank, 192.168.1.100 will be used by default:"
  6. read local_ip
  7. if [[ -z ${local_ip} ]]; then
  8. local_ip="192.168.1.100"
  9. fi
  10. verifiedAddr=`echo ${local_ip} | grep -x -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"`
  11. if [[ -n $verifiedAddr ]] then
  12. validIPaddr=1
  13. fi
  14. until [[ $validIPaddr = 1 ]]
  15. do
  16. echo -n "The IP address you input is incorrect, please try again:"
  17. read local_ip
  18. if [[ -z ${local_ip} ]]; then
  19. local_ip="192.168.1.100"
  20. fi
  21. verifiedAddr=`echo ${local_ip} | grep -x -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"`
  22. if [[ -n $verifiedAddr ]] then
  23. validIPaddr=1
  24. fi
  25. done
  26. validNetmask=0
  27. echo "Please set netmask for this device"
  28. echo -n "if leave it blank, 255.255.255.0 will be used by default:"
  29. read netmask
  30. if [[ -z ${netmask} ]]; then
  31. netmask="255.255.255.0"
  32. fi
  33. verifiedAddr=`echo ${netmask} | grep -x -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"`
  34. if [[ -n $verifiedAddr ]] then
  35. validNetmask=1
  36. fi
  37. until [[ $validNetmask = 1 ]]
  38. do
  39. echo -n "The netmask you input is incorrect, please try again:"
  40. read netmask
  41. if [[ -z ${netmask} ]]; then
  42. netmask="255.255.255.0"
  43. fi
  44. verifiedAddr=`echo ${netmask} | grep -x -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"`
  45. if [[ -n $verifiedAddr ]] then
  46. validNetmask=1
  47. fi
  48. done
  49. ifconfig fec0 $local_ip netmask $netmask
  50. }

执行tftp命令序列

可以将要执行的tftp命令按照顺序写入一个文本文档,然后执行tftp命令时用<符号执行。
例如命令文档tftpcmd_getpackage.txt内容为

  1. verbose
  2. blksize 4096
  3. status
  4. get novar-es3s-firmware.tgz
  5. get f1-qnx-maint.f1img
  6. quit

执行命令为

  1. tftp -e 192.168.1.101 < tftpcmd_getpackage.txt