Shell是Linux系统的操作命令行界面,是人机交互的一种方式,同时Shell也是一种编程语言,可以用于编写Shell脚本程序,在Linux中常用的脚本语言是bash。
makefile,是一个编译脚本,用来完成编译工作的。
所以,可以理解他们都可以作为很多命令的集合,一个用于系统处理(通用工具),一个用于编译处理(特定工具)。通常makefile可以调用shell脚本,以下列出两者在使用上的常用区别。makefile使用可参考(https://blog.youkuaiyun.com/zg915355901/article/details/106082302)
1,等号(=)两边空格。shell:不允许有空格。Makefile:允许有空格
2,Makefile中的shell,每一行是一个进程,不同行之间变量值不能传递。所以,Makefile中的shell不管多长也要写在一行。可以用\来分行写,格式更清晰一点。
3,shell中所有引用以$打头的变量其后要加{}, 而在Makefile中的变量是以$打头的后加()。
Makefile:
PATH="/data/"
SUBPATH=$(PATH)
Shell:
PATH="/data/"
SUBPATH=${PATH}
4,Makefile中如果你需要调用shell中的变量(或者正则表达式中锚定句位$),都需要加两个$符号($$)
PATH="/data/"
echo ${PATH}/*Makefile中变量,即"/data"*/
echo $$PATH /*shell中的变量*/
5,条件判断if
shell:
if ( $NOW_VAR == 1 ) ; then
echo "var is 1"
elif ( $NOW_VAR == 2 ) ; then
echo "var is 2"
else
echo "var is not 1"
fi
Makefile:
NOW_DIR=$(shell pwd)
ifeq ($(NOW_VAR), 1)
NOW_DIR="in 1"
else ifeq ($(NOW_VAR), 2)
NOW_DIR="in 2"
else
NOW_DIR="in not 1 or 2"
endif
6,for 循环
shell:
for pid in ${pids};
do
xxxxx
done
while true
do
xxxx
done
makefile:
file=1 2 3 4 5
all:
for name in $(file); \
do \
echo $$name; \
done
7,待更新