科研中我会到了许多问题,我在这里记录下来,如果你碰巧看到了,如果你碰巧发现了我的错误,或者有补充,请私信或者评论,我会修改的。谢谢。
在今天的实验中,我希望批量处理文件,于是我想到了shell脚本。我从网上搜了几个基本概念,拼凑出来,在此记录一下。
第一行
#! /bin/bash
#!可以认为是一种标识。在最一开始,我知道在shell中使用#进行注释,所以我误以为这是注释,但是我在其他脚本中看到"#! /bin/python3"一下子就联想到这是在指定解释器。ubuntu中shell脚本使用bash运行。我暂时不清楚bash和shell的关系,但是这并不影响我完成我的目的。
遍历当前目录下所有文件
for file in `ls`
do
····
done
ls命令是显示当前目录所有文件,要运行该命令使用撇(`)包起来。
if判断
我前几天遇见过几个脚本,看到if中有"-eq"之类的,心里就觉得这很麻烦,我使用的是最笨的方法,还是老原则,一切目的都是为了实现文件批量处理,只要结果对就行了。
if [ ${file##*.} = 'c' ]
then
`clang-6.0 -S -emit-llvm -O3 -o ${file%.*}.ll $file`
`opt -reg2mem -o ${file%.*}.bc ${file%.*}.ll`
`llvm-dis -o ${file%.*}.ll ${file%.*}.bc`
echo $file
fi
- 判断条件用“[ ]”括起来,四周要有空格(许多网站上都特别提醒)
- 使用for循环中的变量file要加上$
- 注意相等用=,而不是==
- ##*.**可以提取文件后缀,我记得含有提取文件名字忽略后缀的格式
添加权限
sudo chmod -R 777 ./run.sh
添加最高权限采用运行./run.sh
该脚本。
7对应二进制是111,表示文件的读写运行三个操作都可以执行,三个7表示管理,用户,用户组的权限,似乎这样的,不重要了。
完整代码
#! /bin/bash
for file in `ls`
do
if [ ${file##*.} = 'c' ]
then
`clang-6.0 -S -emit-llvm -O3 -o ${file%.*}.ll $file`
`opt -reg2mem -o ${file%.*}.bc ${file%.*}.ll`
`llvm-dis -o ${file%.*}.ll ${file%.*}.bc`
echo $file
fi
done