菜鸟的bash脚本

问题的起源

在写makefile的时候需要将所需要编译的文件名写入到Makefile,当文件的数量很大,工程量很大的时候,就是一件很蛋疼的事情了, 这时候如果能够写个脚本将我们需要写入makefile的内容让脚本自动完成多好 ## test版本 只是做了输出文件名的工作

1
2
3
4
5
6
7
8
#!/bin/bash
OUTPUT="subdir.mk"
DIR=$(pwd)
for i in DIR/*.h
do
temp=`basename $i` #注意是反转字符
echo $temp
done
## 最终改进版本 在做输出重定向的时候,遇到个问题就是temp提取的是头文件的名字,我输出不需要.h的后缀,这个时候就涉及到了 sheel 字符串的截取 了 ,下面几个符号很有用: 1、使用 # 号操作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#substr,例如: str=’http://www.你的域名.com/cut-string.html‘ echo ${str#//} 得到的结果为www.你的域名.com/cut-string.html,即删除从左边开始到第一个”//“及其左边所有字符2、使用 ## 号操作符。用途是从左边开始删除最后一次出现子字符串即其左边字符,保留右边字符。用法为##substr,例如: str=’http://www.你的域名.com/cut-string.html‘ echo ${str##/} 得到的结果为cut-string.html,即删除最后出现的”/“及其左边所有字符 3、使用 % 号操作符。用途是从右边开始删除第一次出现子字符串即其右边字符,保留左边字符。用法为%substr,例如: str=’http://www.你的域名.com/cut-string.html‘ echo ${str%/} 得到的结果为http://www.你的域名.com,即删除从右边开始到第一个"/"及其右边所有字符 4、使用 %% 号操作符。用途是从右边开始删除最后一次出现子字符串即其右边字符,保留左边字符。用法为%%substr,例如: str=’http://www.你的域名.com/cut-string.html‘ echo ${str%%/} 得到的结果为http://www.你的域名.com,即删除从右边开始到最后一个"/"及其右边所有字符
1
2
3
4
5
6
7
8
9
10
# !/bin/bash
DIR=$(pwd)
OUTPUT="subdir.mk"
for i in $DIR/*.h
do

temp=`basename $i`

echo ' $(Dst_SrcObj)/chain_action/'${temp%.*}'.o\'>>$OUTPUT
done