bash script

bash 脚本是 linux 的必备基础,构建工具 make 规则的命令是单行的 bash 脚本,提交给 subshell 执行,在此针对 bash 的基础做个备忘。

变量

变量配置方式 说明
${变量#关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除
${变量##关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除
${变量%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据删除
${变量%%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据删除
${变量/旧字符串/新字符串} 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』
${变量//旧字符串/新字符串} 若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』
变量配置方式 str 没有配置 str 为空字符串 str 已配置非为空字符串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr, var=expr str 不变, var= str 不变, var=$str
var=${str:=expr} str=expr, var=expr str=expr, var=expr str 不变, var=$str
var=${str?expr} expr 输出至 stderr var= var=$str
var=${str:?expr} expr 输出至 stderr expr 输出至 stderr var=$str

${#str} 返回字符串长度,等价于 strlen(str)

条件语句

利用 test 或者 [ expression ] 或者 [[ expression ]] 进行条件测试。详见 test 手册

控制语句

if <condition>; then
	<...>
elif <condition>; then
	<...>
else
	<...>
fi

if <condition>
then
	<...>
elif <condition>
then
	<...>
else
	<...>
fi

一般使用短路求值代替 if 语句,如:

fp='/usr/local/bin/gdb'

if [ -f ${fp} ]; then
	echo 'exists.'
else
	echo 'no exists.'
fi

等价

fp='/usr/local/bin/gdb'

[ -f ${fp} ] && echo 'exists.' || echo 'no exists.'
case ${var} in
	<case1>)
		<...>
		;;
	<case2>)
		<...>
		;;
	*)
		<...>
		;;
esac
for var in <list>
do
	<...>
done

for (( i=1; i<10; ++i ))
do
	<...>
done
while <condition>
do
	<...>
done
until <condition>
do
	<...>
done

函数

自定义函数只能返回整型,来表示成功与否,若要返回值可通过操作全局变更达成。这点与 make 自定义函数类似。

function <fname>() {
	<...>
	return <integer>
}

自动变量:

其它

(阮一峰在 bash-tutorial 写了入门教材《Bash教程》,可作为查阅手册。)