Chinaunix首页 | 论坛 | 博客
  • 博客访问: 712730
  • 博文数量: 79
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 1338
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-12 08:51
个人简介

XMU->九天揽月->五湖抓鳖->DSP->driver->kernel/OpenWRT->ISP/RTOS

文章分类

全部博文(79)

文章存档

2020年(2)

2018年(3)

2016年(7)

2015年(42)

2014年(25)

分类: LINUX

2015-05-11 19:26:29

busybox的shell是ash,ash不同于主机上的sh bash tcsh,它是个精简版,很多标准shell支持的特性它都不支持。

1. 序列生成
    ash不支持内部运算符 ${begin..end}
    必须用 $(seq $start $step $stop)
    例:
        echo $(seq 10)

2. for 循环
    start=1
    step=2
    stop=100
    list=$(seq $stop)
    for m in list;do 
       echo m=$m
    done

3. 算术运算
    发现shell脚本攻略中的方法全都不能使用
    ash不支持 i=`expr $j + $m`  i=$[ j + m]
    只能支持  i=$(($j + $m))
    例:
        leafid=$((($m-1)*$MAX_N + $n))

4. grep与正则表达式
    匹配为数字开头行   grep "^[0-9]" file
    匹配以空格结尾的行  grep "[' ']$" file
    获取数字开头 并且 以空格或tab符结尾的行   grep -n "^[0-9]" mark.data | grep -e "[' ']$" -e "['\t']$"
    grep单个表达式只能支持多个条件的或,多个条件的与只能用 管道 来做。

5. 变量的间接引用
    indirect_var_get()
    {
        local raw=$1
        eval val=\${$raw}
        echo "$val"
    }
    做成了函数,方便用在循环中
    例子:
            wn=2
            rate2=1200
            rate=$(indirect_var_get rate${wn})
            rate=1200

6. awk 的各种用法
    1)位运算 a=1,  b=`awk "BEGIN{f=lshift($a, 3); print f}"`       a左移3位
    2)文件行数  awk 'END{print NR}' file
    3)某域到最后一个域,后台进程的启动命令
        local pid=$$
        local name=`ps -w |grep -w $pid | grep -v grep | awk '{for(i=5;i<=NF;i++) printf("%s ", $i)}'`
    4)筛出包含 $key (支持正则表达式)关键字的行   awk -F: "/${key}/" file
    
7. sed的用法
    1)删除文件中的注释行
        sed '/^[ \t]*#.*/d' -i file      sed '/^[ \t]*#.*/d' file
    2)替换每行的字符串 abc 到 123
        sed 's/abc/123/g' file  
    3)删除每行的字符串
        sed 's/abc//g' file
    4)条件替换,只有包含$key的行
        sed "/^${key}/ s/abc.*$/123/" -i file
    
阅读(7490) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~