标准输出重定向:
ls>ls.txt将命令ls的输出输入到ls.txt中(原内容被覆盖)
ls>>ls.txt将命令ls的输出追加到ls.txt中
(2)标准错误重定向
mkdir/etc/ttmp2>err.log将命令出错的信息输出到err.log中
(3)管道
ls–l|grep‘^d’将ls命令的输出作为grep的输入
3、Shell标准环境变量
set查看shell所有环境变量
HOME用户主目录的路径名
PATH命令查找路径
PS1和PS2
PS1B-Shell主提示符,PS2副提示符
TERM指定终端类型名
显示变量值:
echo$变量名
给变量赋值:
变量名=值
4、程序的前后台切换
Ctrl+z将正在执行的程序切换到后台执行
jobs查看所有后台执行的程序
fg编号将后台执行的程序切换到前台执行
实验四Shell编程
一、实验目的
理解Shell的变量、条件表达式、流程控制和函数的概念,掌握Shell编程的基本方法。
二、实验要求
shell程序的格式。
环境变量、变量参数、用户变量。
条件表达式,文件条件、字符串条件、数学条件和逻辑操作符标达式。
流程控制。
If,for,while等函数。
三、实验内容
变量练习
#!
/bin/sh
#Itismyfirstshellscripttotestvariables
echoThePATHenviromentvariableis:
$PATH
echoThePIDis:
$$
echoThescriptfilenameis:
$0
echoThefirstparameteris:
$1
echoThesecondparameteris:
$2
echoThethirdparameteris:
$3
echoTheIFSenviromentvarableis:
$IFS
echoThe‘$*’paramentvariableis:
“$*”
echoThe‘$@’paramentvariableis“$@”
userlist=`who`
echouserlist|awk‘{printf(“%s%s”,$1,$2)}’
exit0
与脚本交互
#!
/bin/sh
#MySecondShellScripttotesttheinteractionbetweenuserandScript
num=0
while[$num–lt3]
do
echo–nPleaseEnterYourusername:
readusername
echo–nPleaseEnterYourPassword
readpasswd
[$username=‘abcd’–a$passwd=‘1234’]&&{
echoWelcomeToOurSite
break
}
num=`expr$num+1`
done
[$num–eq3]&&Yourhavebeenfailfor3times,Systemhalt.
显示指定目录中,含有bin字符的文件名
#!
/bin/sh
if[$#-lt1]
then
echo-nPleaseaDirectory:
readdir
else
dir=$1
fi
if[!
-d$dir]
then
echo$dirisn'tadircoryordon'texist...
exit1
fi
forfilein$dir/*
do
ifgrep–qbin$file
then
echo$file
fi
done
exit0
函数使用
将指定目录中的所有文件备份当前目录
fcp(){
forfilein$1/*
do
[-f$file]&&{
cp$file./
echo$filehasbeencopied….
}
done
}
whiletrue
do
echo–n“PleaseEnteraDirectoryname(EnterReturntoexit):
”
readdir
[-z$dir]&&exit0
If[-d$dir]
Then
fcp$dir
else
echoEnterError…
fi
done
exit0
四、实验步骤
使用vi编辑器建立Shell脚本文件
#vifilename.sh
使用“chmodu+x脚本文件名”标记脚本文件可执行
#chmodu+xfilename.sh
执行/调试Shell脚本
#./filename
五、作业
注释实习中4个shell脚本的每一条语句的功能。
编写两个数相加的程序
Ø什么是shell脚本程序?
shell脚本程序就是按照一定的语法结构把若干linux命令组织在一起,使这些命令按照我们的要求完成一定功能。
它可以进行类似程序的编写,并且不需要编译就能执行.
Ø当编辑好脚本程序后,要使脚本程序可执行,需要改变其权限:
#chmod+xfilename
Ø变量设定规则:
1.变量与变量内容以等号(=)来连结;
2.等号两边不能直接接空格符;
3.变量名称只能是英文字母与数字,但是数字不能是开头字符;
4.引用变量用“$变量名”,例如
#echo$name
Ø4.若有空格符可以使用双引号或单引号将变量内容结合起来,但须要特别留意,双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符,例如:
#name=aabb//错误
#name=“aabb”//正确
#name=“$LOGNAMEisme”//rootisme
#name=‘$LOGNAMEisme’//$LOGNAMEisme
Ø5.通常大写字符为系统预设变量,自行设定变量可以使用小写字符;
Ø6.取消变量的方法为:
unset变量名
Øecho
显示变量内容
语法:
[test@testtest]#echo$variable
范例:
[test@testtest]#echo$PATH
/bin:
/sbin:
/usr/sbin:
/usr/bin:
/usr/local/sbin:
/usr/local/bin:
/usr/local/bin:
/bin:
/usr/bin:
/usr/X11R6/bin
Øenv
显示目前系统中主要的预设变量内容
语法:
[test@testtest]#env
Øset
显示目前系统中全部的变量内容
语法:
[test@testtest]#set
Ø
Ødeclare
声明变量内容
语法:
#declare[-afirx]变量名
-a:
定义为数组array
-f:
定义为函数function
-i:
定义为整数integer
-r:
定义为『只读』
-x:
定义为透过环境输出变量
Øread
从键盘读入变量内容
语法:
[test@testtest]#readname
testing
[test@testtest]#echo$name
testing
Ø测试文件状态的条件表达式
-e是否存在-d是目录
-f是文件-L符号连接
-s文件非空-r可读
-w写-x可执行
#test-e/dir&&echo“exist”
Ø字符串测试有以下格式
teststr_operator“str”
test“str1”str_operator“str2”
[str_operator“str”]
[“str1”str_operator“str2”]
Ø其中str_operator可以是:
=两个字符串相等!
=两个字符串不相等
-z空串-n非空串
Ø#test“aaa”=“aaa”&&echo“equal”
Ø测试数值格式如下:
Øtestnum1num_operatornum2
Ø[num1num_operatornum2]
Ø
Ø其中num_operator可以是以下内容:
Ø-eq数值相等-ne数值不相等
Ø-gt数1大于数2-lt数1小于数2
Ø-ge数1大于等于数2
Ø-le数1小于等于数2
Ø#test2-lt3&&echo“little”
-a
Ø(and)两状况同时成立!
test-rfile-a-xfile,则file同时具有r与x权限时,才为true.
-o
Ø(or)两状况任何一个成立!
Test-rfile-o-xfile,则file具有r或x权限时,就传回true.
!
Ø相反状态,如test!
-xfile,当file不具有x时,回传true.
数据处理指令包括:
—MOV数据传送指令—MVN数据取反传送指令
—CMP比较指令—CMN反值比较指令
—TST位测试指令—TEQ相等测试指令
—ADD加法指令—ADC带进位加法指令
—SUB减法指令—SBC带借位减法指令
—RSB逆向减法指令—RSC带借位的逆向减法指令
—AND逻辑与指令—ORR逻辑或指令
—EOR逻辑异或指令—BIC位清除指令
ØLinux命令格式:
Ø#command[-options]parameter1
parameter2...
Ø#ls-al/root
Ø--help
Ø大多数GNU工具都有--help选项,用来显示工具的一些信息,如:
#cat--help
Ø如果通过--help显示的信息超过了一屏,可通过管道用less分页程序进行分屏显示,如:
#ls--help|less
Ø非GNU工具可以使用-h或者-help显示帮助信息.
Øman工具用于显示系统文档中的manual页内容,要了解某个工具更为详细的信息,包括man工具自身,可以使用命令man后跟工具名来实现,如:
#manls
Øless分页工具
Øman工具通过分页程序(通常是less)自动发送输出结果,使用户可以分屏浏览一个文件.当以这种方式显示手册页时,less工具将在显示完一屏后,在屏幕底部显示提示符(:
),并等待键盘输入,按下空格键可以显示下一屏的文本信息,按下q键可以退出man并返回到shell提示符.
Ømanual
Ø基于文件系统层次标准(FilesystemHierarchyStandard,FHS),Linux系统的手册页分为10个部分,每个部分描述了相关工具的使用方法.
Ø1.用户命令2.系统调用3.子程序
4.设备5.文件格式6.游戏
7.其他8.系统管理9.本地
10.最新
Ø除非指定手册的某个部分,否则man工具将根据命令行上指定的单词显示手册中最早出现的相关内容.
Ø如输入以下命令,将显示系统手册中第1部分中write工具对应的页面内容:
#manwrite
Ø为了看到第二部分中write工具对应的页面内容,可输入:
#man2write
这个命令限定man工具只在第2部分查找write有关手册页的内容.
Ø使用选项-a,可以浏览相关主题的所有man页,通过按q键转到下一部分.如$man-awrite可浏览到write的所有man页内容.
Øls:
显示目录内容
#ls
Øcd:
更换当前目录
#cd/home
Øcp:
复制文件
#cp/etc/inittab/home
Ømv:
移动文件或更改文件名
#mvfile1file2
#mvfile1/home
Øcat:
显示文本文件内容
#catfile1
Ørm:
删除文件
#rm-ffile1
Ømkdir:
创建目录
#mkdirdir1
Øless或more:
分屏显示文件
#morefile1
#ls|more
Øclear:
清屏
#clear
Øpwd:
显示当前目录路径
#pwd
Ø重定向
Linux中,命令的stdout(标准输出)和stderr(标准错误输出)是显示屏幕,而stdin(标准输入)是键盘.
有时,我们会希望把输出信息输出到某个特定文件中,或从某个文件读入输入信息.这时,就要用到输入输出重定向.
Østdin代码为0使用<或<<
stdout代码为1使用>或>>
stderr代码为2使用2>或2>>
Ø#ls-l>text(清空新建)
Ø#ls-l>>text(追加)
Ø若文本文件file1存在,file2不存在,
#catfile1file2会同时输出正确信息(file1的内容)和错误信息(file2不存在),这时可分别保存正确和错误信息:
#catfile1file2>right2>error
或者将所有信息都保存在一个文件中:
#catfile1file2>msg2>&1
Ø标准输入重定向“<”的作用是:
将原本需要由键盘输入的数据经由文件读入.
#cat>text
上命令会把键盘输入的信息保存在text中,按ctrl+d结束离开.
使用“<”,我们可以用文件代替键盘输入:
#cat>textØ“<<”的作用是“结束输入的字符”
#cat>text<当输入“eof”时,输入结束
Ø管道“|”的作用是把前面一个命令的输出信息做为后面一个命令的输入信息.
Ø#ls/dev|more
#ls/dev|grepcdrom
编译文件的过程可以分以下几个阶段:
ØBootLoader是系统加电后、操作系统内核或用户应用程序运行之前,首先必须运行的一段程序代码
Ø通过这段程序,为最终调用操作系统内核、运行用户应用程序准备好正确的环境
Ø系统启动代码完成基本软硬件环境初始化后,对于有操作系统的情况下,启动操作系统、启动内存管理、任务调度、加载驱动程序等,最后执行应用程序或等待用户命令
Ø对于没有操作系统的系统直接执行应用程序或等待用户命令
主流bootloader介绍
U-boot
vivi
ARMboot
Blob
Redboot
Ø根文件系统是linux/UNIX系统启动的一个重要组成部分,也是操作系统正常工作的必要组成部分,在启动内核后需要挂载根文件系统
Ø一般重要的文件、命令、应用程序等都保存在根文件系统中,操作系统起来后可以直接使用
Ø根文件系统的实现多种多样
基于ram的ramdisk
基于flash的cramfs、yaffs2
基于网络的nfs
Øvi编辑器有3个操作模式:
1、vi编辑模式
2、vi插入模式
3、vi最后一行模式(命令模式)
在编辑模式下,vi将输入的字符作为命令对待,并对每个命令做出回应,但不显示这些字符,如dd命令;
在插入模式下,vi将输入的字符作为正文内容放在正编辑的文件中。
所有以冒号(:
)开始的命令将使vi处于最后一行模式,光标移动到屏幕最底一行,输入的命令将在该行显示,如:
q!
Ø由编辑模式切换到插入模式
vi启动后,在输入文本之前,必须通过按i键(在光标前插入字符)或a键(在光标后追加字符)将vi切换到插入模式。
Ø由插入模式切换到编辑模式
输入完成后,按ESCAPE键,将返回到vi编辑模式。
Ø由编辑模式切换到插入模式
Ø常用最后一行模式命令
:
setnumber加上行号
:
setnonumber取消行号
:
n1,n2con3将n1行到n2行之间的
内容复制到n3行下
:
n1,n2mn3将n1行到n2行之间的
内容剪切到n3行下
3、简述嵌入式系统的体系结构。
(P5)
答:
嵌入式系统自底向上包含四个部分:
硬件平台、嵌入式实时操作系统(RTOS)、硬件抽象层(HAL)和嵌入式实时应用程序。
硬件抽象层位于操作系统和硬件之间,包含了系统中与硬件相关的大部分功能。
屏蔽了底层硬件的多样性,操作系统不再直接面对具体的硬件环境,而是面向由这个中间层次所代表的、逻辑上的硬件环境。
1、ARM微处理器有哪几种运行模式?
其中哪些是特权模式,哪些又是异常模式?
(P64)
答:
ARM微处理器支持7种运行模式,分别为:
用户模式;快速中断模式;外部中断模式;管理模式;数据访问终止模式;系统模式;未定义指令中止模式。
除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(PrivilegedModes);而除去用户模式和系统模式以外的5种又称为异常模式(ExceptionModes),常用于处理中断或异常。
ARM指令有哪几种寻址方式?
试分别叙述其各自的特点并举例说明。
(P77)
答:
ARM指令系统支持的基本寻址方式有7种:
立即数寻址、寄存器寻址、寄存器间接寻址、基址变址寻址、多寄存器寻址、堆栈寻址、相对寻址。
他们的特点分别是:
立即数寻址:
操作数本身就在指令中给出。
如:
ADDR0,R0,#0x3f
寄存器寻址:
指令中地址码给出的是寄存器编号。
如:
ADDR0,R1,R2
寄存器间接寻址:
寄存器中的值作为操作数的地址,操作数本身存放在存储器中。
如:
ADDR0,R1,[R2]
基址变址寻址:
将寄存器的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址,用于访问基址附近的存储器单元。
如:
LDRR0,[R1,#4]
多寄存器寻址:
块拷贝寻址。
如:
LDMIAR0,{R1,R2,R3,R4}
堆栈寻址:
用堆栈作为地址。
如:
STMFDSP!
{R1-R7,LR}
相对寻址:
以程序计