检查SVN本地代码是否需要更新
check_code_change(){FW_PATH=$1echo "checking if $FW_PATH has been changed"cd $FW_PATHrevision=$(svn info |grep "Last Changed Rev" |awk '{print $4}')echo "the revision is $revision"URL=$(svn info |grep "^URL:" |awk '{print $2}')echo "the url is $URL"svnRevision=$(svn info $URL |grep "Last Changed Rev:" |awk '{print $4}')echo "the revision in svn is $svnRevision"if [[ $revision < $svnRevision ]] ; thenreturn 1elsereturn 0fi}
判断某扩展名文件是否存在
判断某个确定文件名的文件是否存在时可以用-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判断为假。
比较两个文件是否相同
#/bin/bashfile1=/tmp/aafile2=/tmp/bbdiff $file1 $file2 > /dev/nullif [ $? == 0 ]; thenecho "they are same"elseecho "they are different"fi
检测文件列表是否有变化
ls *.jar -1 > manifest.tmpdiff manifest.tmp META-INF/IPC_MANIFEST.MF >/dev/null 2>&1if [[ $? != 0 ]]; thencp manifest.tmp META-INF/IPC_MANIFEST.MFrm -f IPC_MANIFEST.MF.sigPKISign -jar $MODULE_HOME/META-INF/IPC_MANIFEST.MFfirm 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的输出重定向等同于11 > /dev/null 2>&1 语句含义:1 > /dev/null : 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。2>&1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
将log文件限制在一定行数内
#!/bin/shLOG_FILE=/var/log/messagesTMP_FILE=/var/log/messages.tmpLINE_LIMIT=10000if [[ -e $LOG_FILE ]]; then#check line number of the log fileline_num=$(wc -l $LOG_FILE | awk '{print $1}')#if exceed line limit, only keep the latest linesif [[ $line_num -gt $LINE_LIMIT ]]; thentail -n $LINE_LIMIT $LOG_FILE > $TMP_FILErm $LOG_FILEmv $TMP_FILE $LOG_FILEfifi
检查网络联通性
HOST_IP=192.168.1.101CheckConnectivity(){echo "Checking network connectivity..."ping -c 10 -o $HOST_IPif [[ $? == 0 ]]; thenecho "Network is available now!"return 0elseecho "The network is unavailable now! try again!"return 1fi}
设置IP地址
SetLocalIP(){validIPaddr=0echo "Please set IP address for this device"echo -n "if leave it blank, 192.168.1.100 will be used by default:"read local_ipif [[ -z ${local_ip} ]]; thenlocal_ip="192.168.1.100"fiverifiedAddr=`echo ${local_ip} | grep -x -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"`if [[ -n $verifiedAddr ]] thenvalidIPaddr=1fiuntil [[ $validIPaddr = 1 ]]doecho -n "The IP address you input is incorrect, please try again:"read local_ipif [[ -z ${local_ip} ]]; thenlocal_ip="192.168.1.100"fiverifiedAddr=`echo ${local_ip} | grep -x -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"`if [[ -n $verifiedAddr ]] thenvalidIPaddr=1fidonevalidNetmask=0echo "Please set netmask for this device"echo -n "if leave it blank, 255.255.255.0 will be used by default:"read netmaskif [[ -z ${netmask} ]]; thennetmask="255.255.255.0"fiverifiedAddr=`echo ${netmask} | grep -x -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"`if [[ -n $verifiedAddr ]] thenvalidNetmask=1fiuntil [[ $validNetmask = 1 ]]doecho -n "The netmask you input is incorrect, please try again:"read netmaskif [[ -z ${netmask} ]]; thennetmask="255.255.255.0"fiverifiedAddr=`echo ${netmask} | grep -x -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"`if [[ -n $verifiedAddr ]] thenvalidNetmask=1fidoneifconfig fec0 $local_ip netmask $netmask}
执行tftp命令序列
可以将要执行的tftp命令按照顺序写入一个文本文档,然后执行tftp命令时用<符号执行。
例如命令文档tftpcmd_getpackage.txt内容为
verboseblksize 4096statusget novar-es3s-firmware.tgzget f1-qnx-maint.f1imgquit
执行命令为
tftp -e 192.168.1.101 < tftpcmd_getpackage.txt
