一、shell相关
$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1…9
$* 这个程式的所有参数,此选项参数可超过9个。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
@
跟
@ 跟
@跟*类似,但是可以当作数组用
if [ -z “$DIRNAME” ]这里的-z是什么意思啊?
if [ -d /userdata ] 这个-d呢?
类似这样的文件操作在shell编程中用处很大:我总结有一些一些经常使用
-d :判断制定的是否为目录
-z:判断制定的变量是否存在值
-f:判断制定的是否为文件
-L:判断制定的是否为符号链接
-r:判断制定的是否可读
-s:判断存在的对象长度是否为0
-w:判断制定的是否可写
-x:判断存在的对象是否可以执行
!:测试条件的否定符号
这些文件操作很多时候给脚本编程带来方便,尤其是用在if条件语句中
echo '$* is ’
∗
e
c
h
o
′
* echo '
∗echo′# is ’ KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ echo '$ is ’ $$
echo '$? is ’ $?
echo '$0 is ’ $0
echo '$1 is ’ $1
#read abc abs abd
#echo $abc
#echo $abs
#echo $abd
expr 3 + 5
expr 3 - 5
expr 100 / 3
expr 100 * 3
sh -x 显示执行该脚本执行所有变量的值
sh -n 返回所有语法错误信息
二、Makefile相关
2.1 make命令参数介绍
下面列举了所有GNU make 3.80版的参数定义。其它版本和产商的make大同小异,不过其它产商的make的具体参数还是请参考各自的产品文档。
“-b” “-m”:这两个参数的作用是忽略和其他版本make的兼容性
“-B” “–always-make”:认为所有目标都需要更新(重编译)
“-C dir” “–directory=dir”:指定makefile的目录。如果有多个”-C”参数,那么后边的路径会以前面的作为相对路径。如:”make -C ~/C_Study/day03-makefile -C 03-make参数”,等价于”make -C ~/C_Study/day03-makefile/03-make参数”。
“–debug=options”:输出make的调试信息。有几个不同的选项参数可以选择,如果没有参数,就输出最简单的调试信息。下面是options的取值:
a—也就是all,输出所有调试信息
b—也就是basic,只输出简单的调试信息。即输出不需要重编译的目标
v—也就是verbose,在b选项的基础之上,输出的信息包含哪个makefile被解析,不需要被重编译的依赖文件(或是依赖目标)等
i—也就是implicit,输出所有隐含规则
j—也就是jobs,输出执行规则中命令的详细信息,如命令的PID,返回值等
m—也就是makefile,输出make读取makefile,更新makefile,执行makefile的信息
“-d”:相当于”–debug=a”
“-e” “–environment-overrides”:指明环境变量的值覆盖makefile中定义的变量的值
“-f=file” “–file=file” “–makefile=file”:指定需要执行的makefile
“-h” “–help”:显示帮助信息
“-i” “–ignore-errors”:在执行时忽略所有的错误
“-Idir” “–include-dir=dir”:指定make命令搜索路径。可以使用多个”-I”参数指定多个目标
“-j(jobnums)” “–jobs=jobnums”:指同时运行命令的个数,如果没有指定此参数,那么make命令能运行多少就运行多少,如果有一个以上的”-j”参数,那么仅有最后一个才是有效的(注意这个参数在MS-DOS中是无效的)
“-k” “–keep-going”:出了错了不会停止运行,如果生成一个目标失败了,那么依赖于其上的目标就不会被执行了
“-l(load)” “–load-average=load” “–max-load=load”:指定make运行命令的负载
“-n” “–just-print” “–dry-run” “–recon”:仅输出执行过程中的命令序列,但并不执行
“-o(file)” “–old-file=file” “–assume-old=file”:不重新生成指定的file,即使这个目标的依赖文件新于它。
“-p” “–print-data-base”:输出makefile中的所有数据,包括所有的规则和变量。这个参数会让一个简单的makefile都输出一堆信息。如果你只是想输出信息而不想执行 makefile,你可以使用“make -qp”命令。如果你想查看执行makefile前的预设变量和规则,你可以使用“make –p –f /dev/null”。这个参数输出的信息会包含着你的makefile文件的文件名和行号,所以,用这个参数来调试你的makefile会是很有用的,特别是当你的环境变量很复杂的时候。
“q” “–question”:不运行命令,也不输出。仅仅检查所指定的目标是否需要更新,如果是0则说明需要更新,2说明有错误发生
“-r” “–no-builtin-rules”:禁止make使用任何隐含规则
“-R” “–no-builtin-varibles”:禁止make使用任何作用于变量上的隐含规则
“-s” “–slient” “–quiet”:在命令运行时不输出命令的输出
“-S” “–no-keep-going” “–stop”:取消“-k”选项的作用。因为有些时候,make的选项是从环境变量“MAKEFLAGS”中继承下来的。所以你可以在命令行中使用这个参数来让环境变量中的“-k”选项失效。
“-t” “–touch”:相当于UNIX的touch命令,只是把目标文件的修改日期变成最新的,也就是阻止生成目标的命令运行
“-v” “–version”:输出make程序的版本,版权等关于make的信息
“-w” “–print-directory”:输出运行makefile之前和之后的信息,这个参数对于跟踪嵌套式调用make时很有用。
“–no-print-directory”:禁止“-w”选项。
“-Wfile” “–what-if=file” “–new-file=file” “–assume-file=file”:假定目标file需要更新,如果和”-n”参数配合使用,会输出该目标更新时的运行动作,如果没有”-n”参数,这个命令和UNIX的touch命令一样,使得file修改时间为当前时间
“–warn-undefined-varibles”:只要make发现有未定义的变量,那么就输出警告信息
关于参数”-i”和”-k”的参数区别
“-i”:这个参数是忽略运行过程中任何错误,并继续往下执行,也就是命令级别的忽略错误目标
“-k”:这个参数是当某个目标中出现错误,忽略此目标以及此目标依赖的生成规则,继续往上运行下一个目标
2.2 makefile之patsubst函数
格式:$(patsubst pattern,replacement,text)
名称:模式字符串替换函数——patsubst。
功能:查找text中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式pattern,如果匹配的话,则以replacement替换。
这里,pattern可以包括通配符“%”,表示任意长度的字串。如果replacement中也包含“%”,那么,replacement中的这个“%”将是pattern中的那个“%”所代表的字串。(可以用“\”来转义,以“%”来表示真实含义的“%”字符)
返回:函数返回被替换过后的字符串。
示例:
$(patsubst %.c,%.o, a.c b.c)
把字串“a.c b.c”符合模式[%.c]的单词替换成[%.o],返回结果是“a.o b.o”
三、grep命令
-a --text # 不要忽略二进制数据。
-A <显示行数> --after-context=<显示行数> # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b --byte-offset # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count # 计算符合范本样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> --directories=<动作> # 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> --regexp=<范本样式> # 指定字符串作为查找文件内容的范本样式。
-E --extended-regexp # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> --file=<规则文件> # 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F --fixed-regexp # 将范本样式视为固定字符串的列表。
-G --basic-regexp # 将范本样式视为普通的表示法来使用。
-h --no-filename # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H --with-filename # 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i --ignore-case # 忽略字符大小写的差别。
-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。
-P --perl-regexp # PATTERN 是一个 Perl 正则表达式
-q --quiet或–silent # 不显示任何信息。
-R/-r --recursive # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages # 不显示错误信息。
-v --revert-match # 反转查找。
-V --version # 显示版本信息。
-w --word-regexp # 只显示全字符合的列。
-x --line-regexp # 只显示全列符合的列。
-y # 此参数效果跟“-i”相同。
-o # 只输出文件中匹配到的部分。
-m --max-count= # 找到num行结果后停止查找,用来限制匹配行数
使用案例grep -rHn “abc” ./XXX
在XXX文件下查找包含文本abc的地方都可以找到