#!/bin/bash
#j=0
#for i in `ls -1`
#do
# folder_list[j]=$i
# j=`expr $j + 1`
#done
#
#for n in ${folder_list[@]};
#do
# echo ${n}
#done
case_array=($(awk '{print $1}' list))
for test_case in ${case_array[@]};do
cp run.tcl /home/cpan/workspace/esl_0.2_rm_struct/CHStone_O3/$test_case
cd $test_case
sed -i "s/adpcm/${test_case}/g" run.tcl
#../../bin/Linux_64/esl-debug run.tcl
#sed -i '/#run_hw ${design}_O1/arun_hw clang_O1_O3.bc' run.tcl
cd ../
echo "$test_case"
done
ps:shell中用的不是单引号,特别注意,方括号中必须加空格
sed中-i是对源文件进行修改,可以先不加测试一下。其中/a是插入下一行,/i是插入上一行。
1、用ESL_0.2的rm_struct pass 跑每个case,case目录下会生成一个没有struct的clang_O1_O3.bc的文件。
2、将clang_O1_O3.bc文件在拷贝到ESL_0.1对应case目录下,准备进行仿真。
3、需要将ESL_0.1下case中run.tcl修改。
Shell 基本运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
两点注意:
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
乘号(*)前边必须加反斜杠()才能实现乘法运算;
if…then…fi 是条件语句
#注意等号两边不要留空格
Shell 数组
读取数组
读取数组元素值的一般格式是:
${array_name[index]}
使用@ 或 * 可以获取数组中的所有元素
(1)判断输入参数1是否为空
if [ ! -n "$1" ];then
echo "Missing processing file parameter!\n"
exit 1
fi
【】内部必须有空格。
(2)如何用shell命令分割传递的参数(比如文件名)
比如分割netperf-2.7.0.tar.gz
#!/bin/sh
netperfpath=$1
array=(${netperfpath//./ })
echo array[0]
可以这么理解,//,/ 就是将,替换成空格(还可以如//t/b将t转换为b);如果string="aa bb ccc"那么其实可以直接array=($string)就能将字符串转换为数组;
(3)OpenDot.sh 根据参数运行命令
#!/bin/bash
#if [ $# < 2 ];then
if [ ! -n "$1" ];then
echo "Missing processing file parameter!\n"
exit 1
fi
name=$1
array=(${name//./ })
echo $array
dot -Tjpeg $1 -o $array.jpeg
eog $array.jpeg &
查询指令:
find . -name "*.c" | xargs grep "ReadBuf"