工作了大半年了,发现学习嵌入的我,还需要对shell脚本有一定的了解,因为个人感觉Makefile有很多的基础语法就是shell基础。所以在51CTO上,弥补了一把shell的基础,虽然没有精通,但是现在能够看懂还不是什么问题了。接下来我就把我印象中比较重要的知识点记录一下。
shell中变量直接赋值是不能加空格的,也不需要封号。 比如 name=sean
变量的间接赋值 read -p “give number ” a 表示通过用户交互给a赋值,同时双引号里面的是打印出来的提示。
$?表示上一条指令是否执行成功,如果成功的话是0.
条件判断使用[ 2 -eq 3 ] 注意中括号两边需要空格 也可以使用[[ 2=3 ]]但是该表示方法在不同的操作系统可能结果不同,因为有的不能识别该语法。
[ -z $var ]表示变量var是否为空值
[ -d $var ]表示变量var路径是否存在
[ -f $var ] 判断文件var是否存在
[ -s $var ] 判断文件是否可执行
单引号里面的字符不转义,双引号里面的字符是转义的。
$0表示脚本名字 $1传进去的第一个参数 $2传进去的第二个参数 $#传进去的参数总数 $@传进去的所有参数
exit 1 退出脚本,并且是非正常退出
同样的函数也可以传递参数,但是并不等于执行脚本时传进去的参数
if []; then
elif []; then
else
fi
while []
do
done
$(( 2+3))表示算术运算
for i in 'seq 10'
do
done
case $i in
var1)
;;
var2)
;;
esac
bash -x name.sh表示调试脚本
cmp -s xx1 xx2 比较两个文件或二进制程序。
wc -l 统计行号
dos2unix 将windows中文本内容格式转化为unix文本格式,主要是每一行最后的换行字符不同的区别。
如果要在脚本中加载函数库 需要使用source或者. 后面写上库的名字
shell计算
$((1+2))
[1+2]
expr 1+ 2 注意操作符之间需要添加空格,否则会报错
echo -n 表示输出不换行,默认是换行的。
time 命令可以测脚本运行使用的时间
dirname 求出文件路径
basename 求出文件
data + %Y-%m-%d
当然shell也可以使用printf打印,格式如C语言。
shift 表示右移输入参数
id user 用来判断user用户是否存在
touch xxx创建新的用户
curl ip.cn? ip=11.11.11.11 可以用来判断ip地址的归属地
接下来是正则表达式的基本语法
^ xx 表示以xx为开头的行
xx$ 表示以xx为结尾的行
^$表示空白行
grep -v 排除有关键字的行 -c 有关键字的统计行 -E 表示允许扩展正则表达式
[a-zA-Z0-9]表示符合的字符是字母和数字
[^]表示取反
.表示任意字符
*表示0个或任意个前面的字符
\{3,5\}表示重复字符3-5次
?表示前面的字符0个或1个。
需要注意的是双引号里可以引用变量的内容,但是单引号只能是变量字面上的意思。