嵌入式陌生人<em></em> 阅读(22) 评论(0)
一 shell编程
1 一种解释型语言,不需要编译
2 本质是shell命令的有序集合
3 执行步骤
1 编辑
2 设置可执行权限
3 执行
二 shell变量
1 ***自定义变量 Variable=value 注意,等号两边不能有空格,赋值方式 var1=“aaa” ,
shell变量使用方式 前要加$,例如 echo $var1
2 ***位置变量 即命令行参数,使用$1 $2 $3 ...... $N, 注意 $与数字的结合顺序,
$9以上的,例如$10 应写成${10}
$0表示脚本名称
3 环境变量,HOME、PATH 常用
1:farsight@ubuntu:~/yuanda_homework/linux_c/day5$ echo $HOME
/home/farsight
2:farsight@ubuntu:~/yuanda_homework/linux_c/day5$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
4 ***预定义变量:预定义变量和环境变量相类似,也是在shell一开始时就定义了的变
量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义
它。所有预定义变量都是由$符和另一个符号组成
$# 包含命令行参数的个数, 不包含 $0
$@ 包含所有命令行参数:“$1,$2,……$9”
$? 包含前一个命令的退出状态,常用test测试语句和获取函数返回值连用
$* 包含所有命令行参数:“$1,$2,……$9”
$$ 包含正在执行进程的ID号

三 shell程序和语句
1 说明性语句 # 注意,#号后需要加空格
2 功能性语句 任意的shell命令
3 结构性语句 条件测试、分支、循环、循环控制
四 常用功能性语句
1 read 从输入读入一个变量,例如 read VAR1
read -a 读入一个数组
read -p
***注意读入参数个数
2 expr 算数运算语句
+ - \* / %
注意 1 在运算符与运算数之间要有空格
2 乘法运算, \* 需要屏蔽原*号含义(匹配字符,通配符),
例如 expr 12 + 5 \* 3,ppt中前边的$符号不需要写(这是嵌入式学
院课程讲义上的地方写错了)
3 条件测试 test 条件成立返回为真(0) 条件不成立返回假 (非0),可以测试三种对象,字符串、
数字、文件属性
字符串测试
s1 = s2 测试两个字符串的内容是否完全一样
s1 != s2 测试两个字符串的内容是否有差异
-z s1 测试s1 字符串的长度是否为0
-n s1 测试s1 字符串的长度是否不为0

整数测试
a -eq b 测试a 与b 是否相等
a -ne b 测试a 与b 是否不相等
a -gt b 测试a 是否大于b
a -ge b 测试a 是否大于等于b
a -lt b 测试a 是否小于b
a -le b 测试a 是否小于等于b

文件测试
-d name 测试name 是否为一个目录
-f name 测试name 是否为普通文件
-L name 测试name 是否为符号链接(软链接)
-r name 测试name 文件是否存在且为可读
-w name 测试name 文件是否存在且为可写
-x name 测试name 文件是否存在且为可执行
-s name 测试name 文件是否存在且其长度不为0
f1 -nt f2 测试文件f1 是否比文件f2 更新,比较的是最后修改时间
f1 -ot f2 测试文件f1 是否比文件f2 更旧,比较的是最后修改时间
五 结构性语句
1 条件语句
语法结构 :
if 表达式
then
执行的命令列表
fi
if 表达式
then
执行的命令列表
else
执行的命令列表
fi 注意结束书写方式
书写格式
1
test $VAR -eq $VAR1
echo $? 获取上一条命令执行结果
2
if test -f $filename
3
if [ -f $filename ] 注意,[]中左右需要有空格
2 case语句
case 字符串变量 in
模式1) ***注意此处半个括号
命令表1
;; ***注意此处需要有两个分号,表示结束此模式的case
模式2)
命令表2
;;
……
模式n)
命令表n
;;
esac 注意结束书写方式
3 for语
for 变量名 in 单词
do
命令表
done
4 while
while 命令或表达式
do
命令表
done
5 循环控制
break n 注意可以跳出n层循
continue
6 函数
参数通过位置变量传递参数
$? 获取函数执行结果
调用两种方式需要注意
例如
Add 11 12,此时Add函数中定义的局部变量如未加local限制,则作用域范围从定
义处开始,到文件结束
RESULT=`Add 1 2`,以命令方式调用函数,则函数中变量作用域在函数范围之内,
RESULT值为Add函数中的echo输出