Linux shell sed awk
2015-11-17 14:41
337 查看
1、我们的平台编译kernel的时候总是要输入项目名称,很麻烦
################################################ ## Compile kernel and pack it into boot.img ## ################################################ #!/bin/sh PROJECT=$1 echo $PROJECT if [ "$1" = "" ];then echo "Use: makeMtk.ini file for the mkkernel project_name" #exit 修改 sen -n "1p" makeMtk.ini获取makeMtk.ini的第一行数据 #awk '{print $3}'获取第三个参数 #read LINE 把之前传进来的参数读取出来 sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINE do PROJECT=$LINE ./makeMtk $PROJECT new kernel ./makeMtk $PROJECT remake kernel echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img done #编译完成后退出 exit else echo "Use: $1 for the project name" PROJECT=$1 fi echo ./makeMtk $PROJECT new kernel ./makeMtk $PROJECT remake kernel echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img
看到代码里面我们每次要编译内核的时候都要输入./mkkernel mid713l_lp_lvds mid713l_lp_lvds 是项目名称,我觉得很麻烦。
2、sed读取文件的某一行
读取文件的某一行可以看看sed 这个命令sed -n “1p” mkkernel 显示文件的第一行
sed -n “1,4p” mkkernel 显示文件第一行到第四行
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ sed -n "1p" mkkernel ################################################ weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ sed -n "1,4p" mkkernel ################################################ ## Compile kernel and pack it into boot.img ## ################################################ #!/bin/sh weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$
3、 awk截取某一列
awk ‘{print $3}’ 把管道前面的第三列显示出来weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ cat makeMtk.ini project = mid713l_lp_lvds build_mode = eng weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ cat makeMtk.ini |awk '{print $3}' mid713l_lp_lvds eng weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$
4、while read LINE ;do done 读取文件
do done会重新起一个子shell 这是为什么我不能把$LINE传下去的原因sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINE do PROJECT=$LINE ./makeMtk $PROJECT new kernel ./makeMtk $PROJECT remake kernel echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img done
5、用set -x set +x调试上面的说法
################################################ ## Compile kernel and pack it into boot.img ## ################################################ #!/bin/sh set -x if [ "$1" = "" ];then echo "Use: makeMtk.ini file for the mkkernel project_name" #exit 修改 sen -n "1p" makeMtk.ini获取makeMtk.ini的第一行数据 #awk '{print $3}'获取第三个参数 #read LINE 把之前传进来的参数读取出来 sed -n "1p" makeMtk.ini|awk '{print $3}'|while read LINE do PROJECT=$LINE echo $PROJECT break done echo $PROJECT #编译完成后退出 #exit else echo "Use: $1 for the project name" PROJECT=$1 fi echo ./makeMtk $PROJECT new kernel set +x #./makeMtk $PROJECT remake kernel #echo ./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img #./mediatek/build/tools/images/mkbootimg --kernel ./out/Download/flash/kernel_$PROJECT.bin --ramdisk ./out/target/product/$PROJECT/ramdisk.img -o ./out/target/product/$PROJECT/boot.img
输出结果如下
weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ ./wmkkernel ++ '[' '' = '' ']' ++ echo 'Use: makeMtk.ini file for the mkkernel project_name' Use: makeMtk.ini file for the mkkernel project_name ++ sed -n 1p makeMtk.ini ++ read LINE ++ awk '{print $3}' ++ PROJECT=mid713l_lp_lvds ++ echo mid713l_lp_lvds mid713l_lp_lvds ++ break ++ echo ++ echo ./makeMtk new kernel ./makeMtk new kernel ++ set +x weiqifa@weiqifa-Inspiron-3847:~/weiqifa/new_tm100/tm100$ vim wmkkernel
所以最终我的修改方案是第一种,网上查的办法行不通。
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享
- linux Shell学习笔记第五天