嵌入式操作系统 Linux篇 教学课件 ppt 作者 华清远见嵌入式学院 程姚根 苗德行 第8章 shell编程

上传人:E**** 文档编号:89409371 上传时间:2019-05-24 格式:PPT 页数:52 大小:533.50KB
返回 下载 相关 举报
嵌入式操作系统 Linux篇 教学课件 ppt 作者  华清远见嵌入式学院 程姚根 苗德行 第8章  shell编程_第1页
第1页 / 共52页
嵌入式操作系统 Linux篇 教学课件 ppt 作者  华清远见嵌入式学院 程姚根 苗德行 第8章  shell编程_第2页
第2页 / 共52页
嵌入式操作系统 Linux篇 教学课件 ppt 作者  华清远见嵌入式学院 程姚根 苗德行 第8章  shell编程_第3页
第3页 / 共52页
嵌入式操作系统 Linux篇 教学课件 ppt 作者  华清远见嵌入式学院 程姚根 苗德行 第8章  shell编程_第4页
第4页 / 共52页
嵌入式操作系统 Linux篇 教学课件 ppt 作者  华清远见嵌入式学院 程姚根 苗德行 第8章  shell编程_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《嵌入式操作系统 Linux篇 教学课件 ppt 作者 华清远见嵌入式学院 程姚根 苗德行 第8章 shell编程》由会员分享,可在线阅读,更多相关《嵌入式操作系统 Linux篇 教学课件 ppt 作者 华清远见嵌入式学院 程姚根 苗德行 第8章 shell编程(52页珍藏版)》请在金锄头文库上搜索。

1、,Shell编程基础,www.embedu.org,本章的要求,第八章、shell编程基础 熟悉shell基础 熟悉shell变量及环境变量 熟悉使用shell测试语句 熟练使用shell控制语句 熟练使用shell函数 熟悉shell数组,www.embedu.org,8.1 Linux下shell编程基础,www.embedu.org,4,Shell脚本的本质,编译型语言 解释型语言 Shell脚本语言是解释型语言 Shell脚本的本质: Shell命令的有序集合。,www.embedu.org,5,shell 编程的基本过程,基本过程分为三步:,Step1. 建立 shell 文件 包含

2、任意多行操作系统命令或shell命令的文本文件;,Step2. 赋予shell文件执行权限 用chmod命令修改权限;,Step3. 执行shell文件 直接在命令行上调用shell程序.,www.embedu.org,6,Step1: 建立shell文件 (可用任何建立文本文件的方法) $ cat prog1.sh date,Step2: 赋予执行权限: (初始文本文件无执行权限) $ chmod 740 prog1.sh,Step3: 执行该shell程序 $ prog1.sh prog1.sh: not found (shell在标准搜索路径中找不到prog1.sh),Step4: 指定

3、路径或修改环境变量PATH后执行shell程序 $ ./prog1.sh 2009年 12月 16日 星期二 14:52:57 CST,实例,www.embedu.org,8.2 Linux下shell变量及环境变量,www.embedu.org,8,Shell变量,Shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、浮点型),将任何赋给变量的值都解释为一串字符 Variable=value 命名规则同C+中的命名规则 count=1 echo $count DATE=date echo $DATE,www.embedu.org,9,shell变量,Bourne Shell有如下

4、四种变量: 用户自定义变量 位置变量即 命令行参数 预定义变量 环境变量,www.embedu.org,10,用户自定义变量,在shell编程中通常使用全大写变量,方便识别 $ COUNT=1 变量的调用:在变量前加$ $ echo $HOME Linux Shell/bash从右向左赋值 $Y=y $ X=$Y $ echo $X y 使用unset命令删除变量的赋值 $ Z=hello $ echo $Z hello $ unset Z $ echo $Z,www.embedu.org,11,位置变量,$0 与键入的命令行一样,包含脚本文件名 $1,$2,$9 分别包含第一个到第九个命令行

5、参数 $# 包含命令行参数的个数 $ 包含所有命令行参数:“$1,$2,$9” $? 包含前一个命令的退出状态 $* 包含所有命令行参数:“$1,$2,$9” $ 包含正在执行进程的ID号,www.embedu.org,12,常用shell环境变量,HOME: /etc/passwd文件中列出的用户主目录 IFS:Internal Field Separator, 默认为空格,tab及换行符 PATH :shell搜索路径 PS1,PS2:默认提示符($)及换行提示符() TERM:终端类型,常用的有vt100,ansi,vt200,xterm等,www.embedu.org,8.3 Linu

6、x下shell测试语句,www.embedu.org,14,shell 程序由零或多条shell语句构成。 shell语句包括三类:说明性语句、功能性语句和结构性语句。 说明性语句: 以#号开始到该行结束,不被解释执行 功能性语句: 任意的shell命令、用户程序或其它shell程序。 结构性语句: 条件测试语句、多路分支语句、循环语句、循环控制语句等。,shell 程序和语句,www.embedu.org,15,注释行可以出现在程序中的任何位置,既可以单独占用一行, 也可以接在执行语句的后面. 以#号开始到所在行的行尾部分,都不被解释执行. 例如: #! /bin/sh # # 本程序说明

7、# command_1 command_2 # command_2的语句说明 # 下面程序段的说明 command_m command_n # commandn_语句的说明 ,告诉OS用哪种类型的shell来解释执行该程序,说明性语句(注释行),www.embedu.org,16,read read从标准输入读入一行, 并赋值给后面的变量,其语法为: . read var 把读入的数据全部赋给var . read var1 var2 var3 把读入行中的第一个单词(word)赋给var1, 第二个单词赋给var2, 把其余所有的词赋给最后一个变量. 如果执行read语句时标准输入无数据, 则

8、程序在此停留等侯, 直到数据的到来或被终止运行。,常用功能性语句(命令),www.embedu.org,17,# example1 for read echo “Input your name: c“ read username echo “Your name is $username“ #example2 for read echo “Input date with format yyyy mm dd: c“ read year month day echo “Today is $year/$month/$day, right?“ echo “Press enter to confirm a

9、nd continuec“ read answer echo “I know the date, bye!“,应用实例,www.embedu.org,18,expr 算术运算命令expr主要用于进行简单的整数运算,包括加(+)、减(-)、乘(*)、整除(/)和求模(%)等操作。例如: $ expr 12 + 5 * 3 27 $ expr 3 - 8 / 2 -1 $ num=9 $ sum=expr $num * 6 $ echo $sum 54,反斜线去掉*号的元字符含义,反撇号引用命令的运行结果,www.embedu.org,19,test test语句可测试三种对象: 字符串 整数 文

10、件属性 每种测试对象都有若干测试操作符 例如: test “$answer“ = “yes“ 变量answer的值是否为字符串yes test $num eq 18 变量num的值是否为整数18 test -d tmp 测试tmp是否为一个目录名,www.embedu.org,20,字符串测试,s1 = s2 测试两个字符串的内容是否完全一样 s1 != s2 测试两个字符串的内容是否有差异 -z s1 测试s1 字符串的长度是否为0 -n s1 测试s1 字符串的长度是否不为0,www.embedu.org,21,整数测试,a -eq b 测试a 与b 是否相等 a -ne b 测试a 与b

11、 是否不相等 a -gt b 测试a 是否大于b a -ge b 测试a 是否大于等于b a -lt b 测试a 是否小于b a -le b 测试a 是否小于等于b,www.embedu.org,22,文件测试,-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

12、是否比文件f2 更新 f1 -ot f2 测试文件f1 是否比文件f2 更旧,www.embedu.org,8.4 Linux下shell控制语句,www.embedu.org,24,结构性语句主要根据程序的运行状态、输入数据、变 量的取值、控制信号以及运行时间等因素来控制程序的运 行流程。 主要包括:条件测试语句(两路分支)、多路分支语 句、循环语句、循环控制语句和后台执行语句等。,结构性语句,www.embedu.org,25,ifthenfi 语法结构: if 表达式 then 命令表 fi 如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。 if和fi

13、是条件语句的语句括号, 必须成对使用; 命令表中的命令可以是一条, 也可以是若干条。,条件语句,www.embedu.org,26,shell程序prog2.sh(测试命令行参数是否为已存在的文件或目录)。用法为: ./prog2.sh file 代码如下: #The statement of ifthenfi (注释语句) if -f $1 (测试参数是否为文件) then echo “File $1 exists“ (引用变量值) fi if -d $HOME/$1 (测试参数是否为目录) then echo “File $1 is a directory“ (引用变量值) fi,实例,w

14、ww.embedu.org,27,执行prog2程序: $ ./prog2.sh prog1.sh File prog1.sh exists $0为prog2.sh; $1为prog1.sh, 是一个已存在的文件. $ ./prog2.sh backup File backup is a directory $0为prog2.sh; $1为backup,是一个已存在的目录.,如果不带参数, 或大于一个参数运行prog2, 例如: $ ./prog2.sh (或 $ ./prog2.sh file1 file2) 会出现什么结果?,www.embedu.org,28,ifthenelsefi 语

15、法结构为: if 表达式 then 命令表1 else 命令表2 fi 如果表达式为真, 则执行命令表1中的命令, 再退出if 语句; 否则执行命令表2中的语句, 再退出if语句.,注意: 无论表达式是否为真, 都有语句要执行.,条件语句,www.embedu.org,29,test命令的使用 test命令测试的条件成立时, 命令返回值为真(0),否则返回值为假(非0).,用方括号替代test语句,至少一个空格,至少一个空格,www.embedu.org,30,例子: shell程序prog3.sh, 用法为: ./prog3.sh file 内容如下: #The statement of i

16、fthenelsefi if -d $1 then echo “$1 is a directory“ exit (退出当前的shell程序) else if -f $1 then echo “$1 is a common file“ else echo “unknown“ fi fi,www.embedu.org,31,运行prog3.sh程序: $ ./prog3.sh backup backup is a directory $ ./prog3.sh prog1 prog1 is a common file $ ./prog3.sh abc unknown,prog3.sh是对prog2.sh的优化, 逻辑结构更加清晰合理!,www.embedu.or

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号