1、主讲:任继平主讲:任继平邮箱:邮箱:华中农业大学信息学院计算机科学系Linux - What? - Why? - How?华中农业大学信息学院计算机科学系What?华中农业大学信息学院计算机科学系 华中农业大学信息学院计算机科学系华中农业大学信息学院计算机科学系主要参考资料:主要参考资料: 1 杨宗德杨宗德.Linux高级程序设计高级程序设计(第三版)(第三版) 北京北京:人民人民邮电出版社邮电出版社2012各种操作系统源代码分析的书籍。各种操作系统源代码分析的书籍。作业平时表现课程成绩AB期末考试D实验C作业、实验和平时表现:作业、实验和平时表现:30%30%期末考试:期末考试:70%70%
2、课程要求:课程要求:课程内容课程内容网络编程网络编程内存管理内存管理文件系统文件系统设备管理设备管理进程管理Shell编程课程特点课程特点概念较多,抽象涉及内核原理涉及面广Linux编程特点Linux编程及应用主要知识点编程及应用主要知识点(1)补充:)补充:Linux下下Shell编程编程(2)磁盘文件(普通文件,链接文件,目录)管理)磁盘文件(普通文件,链接文件,目录)管理l教材第教材第4、5、6章章(3)进程及进程间通信)进程及进程间通信l教材本书第教材本书第7、8、9章章(4)线程及线程间同步)线程及线程间同步l教材第教材第10、11章章(5)网络编程)网络编程l教材第教材第12、13
3、、14、15章章(6)其它:编程工具、编程环境)其它:编程工具、编程环境l教材第教材第1、2、3章章磁盘文件管理主要内容磁盘文件管理主要内容普通文件普通文件IO操作操作lANSIC文件文件IO,文件描述符及相关操作,文件描述符及相关操作lPOSIX文件文件IO,文件流及相应操作,文件流及相应操作目录文件管理目录文件管理l目录流及目录流操作目录流及目录流操作符号链接文件管理符号链接文件管理l符号链接及操作符号链接及操作磁盘文件属性获取与磁盘文件属性修改磁盘文件属性获取与磁盘文件属性修改目标:目标:l能够实现能够实现cp命令,命令,ls l等基本命令的源代码编写等基本命令的源代码编写进程及进程间通
4、信机制主要知识点进程及进程间通信机制主要知识点进程管理进程管理l创建创建l执行新代码执行新代码l退出退出l等待等待进程间通信进程间通信数据传递:数据传递:l管道(有名,无名管道)管道(有名,无名管道)lIPC的消息队列的消息队列lIPC共享内存共享内存同步同步l信号量信号量异步异步l信号信号线程与线程同步基本知识点线程与线程同步基本知识点线程基本操作线程基本操作l创建创建l退出退出l取消取消l等待等待线程同步机制线程同步机制l互斥锁互斥锁l读写锁读写锁l条件变量条件变量l线程信号灯线程信号灯线程与信号线程与信号网络编程知识点网络编程知识点网络基础及支撑函数,工具网络基础及支撑函数,工具lTCP
5、/IP协议栈,数据封包拆包过程,协议栈,数据封包拆包过程,TCP,UDP,IP包头包头lBSDTCP,UDP网络编程流程及网络编程流程及API函数函数l地址处理函数,大小端问题,地址处理函数,大小端问题,socket属性控制属性控制l域名解析域名解析TCP高级高级l阻塞与非阻塞处理阻塞与非阻塞处理l多路复用多路复用l信号驱动信号驱动UDP高级高级l广播广播l组播组播编程工具及编程环境知识点编程工具及编程环境知识点编辑器,编译调试工具使用编辑器,编译调试工具使用lVIMlGCClGDBlMakefile头文件,库文件的使用,库文件的创建头文件,库文件的使用,库文件的创建错误,帮助信息的获取,编译
6、规范要求错误,帮助信息的获取,编译规范要求段域加载,内存管理基础知识段域加载,内存管理基础知识补充补充 Shell编程编程本章学习目标本章学习目标了解了解shell编程的基本概念及其特点编程的基本概念及其特点掌握掌握shell各种各种变量变量的区别的区别掌握正则表达式的使用方法掌握正则表达式的使用方法熟悉熟悉shell的各种的各种流程控制流程控制了解了解shell的函数的函数华中农业大学信息学院计算机科学系目录目录1.1 Shell概述概述1.2 创建和执行创建和执行shell程序程序1.3 变量变量1.4 位置参数位置参数1.5 特殊字符特殊字符1.6 运算符运算符1.7 输入和输出输入和输
7、出1.8 表达式的比较表达式的比较1.9 流程控制语句流程控制语句1.10 函数函数华中农业大学信息学院计算机科学系1.1 Shell概述概述Shell就像一个壳层,这个壳层介于用户和操作系统就像一个壳层,这个壳层介于用户和操作系统之间,负责将用户的命令解释为操作系统可以接收之间,负责将用户的命令解释为操作系统可以接收的低级语言,并将操作系统响应的信息以用户可以的低级语言,并将操作系统响应的信息以用户可以了解的方式来显示。了解的方式来显示。硬件硬件操作系统操作系统KernelShell华中农业大学信息学院计算机科学系1.1 Shell概述概述Shell角色图角色图Shell操作系统操作系统ke
8、rnel硬件硬件华中农业大学信息学院计算机科学系 系统初启和进程树Romproc1proc0mainstart/etc/initShShlpdcron$xinetdMaster分区表bootWindowsbootLinuxwindows分区unix分区用户区核心区内存/etc/inittabforkexecftpdhttpdtelnetddaemon华中农业大学信息学院计算机科学系initgettyloginshell用户登录用户登录,退出循环过程退出循环过程华中农业大学信息学院计算机科学系1.1 Shell概述概述从用户登陆到注销期间,用户输入的每个从用户登陆到注销期间,用户输入的每个命令命
9、令都会经过都会经过解解译及执行译及执行,其负责机制就是,其负责机制就是shell。shell是一个是一个命令语言解释器命令语言解释器,它拥有自己内建的,它拥有自己内建的shell命令命令集,集,shell也能被系统中其他应用程序所调用。用户在提示也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由符下输入的命令都由shell先解释先解释然后传给然后传给Linux核心。核心。有一些命令,如改变工作目录命令有一些命令,如改变工作目录命令cd,是,是shell内置命令内置命令。还有一些命令,例如拷贝命令还有一些命令,例如拷贝命令cp和移动命令和移动命令mv,是存在,是存在于文件系统中某个目录
10、下的于文件系统中某个目录下的单独的程序单独的程序。对用户而言,不。对用户而言,不必关心一个命令是建立在必关心一个命令是建立在shell内部还是一个单独的程序。内部还是一个单独的程序。 华中农业大学信息学院计算机科学系1.1 Shell概述概述shell的主要版本的主要版本l在在Linux系统中常见的系统中常见的shell版本有以下几种。版本有以下几种。l(1)Bourne shell(sh):它是:它是UNIX最初使用最初使用的的shell,并,并且在每种且在每种UNIX都可以使用。它在都可以使用。它在shell编程方面相当优编程方面相当优秀,但处理与用户的交互方面不如其他几种秀,但处理与用户
11、的交互方面不如其他几种shell。l(2)C shell(csh):它最初由:它最初由Bill Joy编写,它更多地考编写,它更多地考虑了用户界面的友好性,支持如命令补齐等一些虑了用户界面的友好性,支持如命令补齐等一些Bourne shell所不支持的特性,但其编程接口做得不如所不支持的特性,但其编程接口做得不如Bourne shell。 shell被很多被很多程序员使用程序员使用,因为,因为shell的语法和语言的很相似,的语法和语言的很相似,shell也由此得名。也由此得名。l(3)Korn shell(ksh):它集合了:它集合了C shell和和Bourne shell的的优点,并且和
12、优点,并且和Bourne shell完全兼容。完全兼容。华中农业大学信息学院计算机科学系1.1 Shell概述概述l(4)Bourne Again shell(bash):bash是是大多数大多数Linux系系统的默认统的默认shell。它是。它是Bourne shell的扩展,并与的扩展,并与Bourne shell完全向后兼容,而且在完全向后兼容,而且在Bourne shell的基础上增加的基础上增加和增强了很多特性。和增强了很多特性。l(5)t csh:它是:它是shell的一个扩展版本,与的一个扩展版本,与csh完全完全向后兼容,但它包含了更多使用户感觉方便的新特性,向后兼容,但它包含
13、了更多使用户感觉方便的新特性,其最大的提高是在命令行编辑和历史浏览方面。它不其最大的提高是在命令行编辑和历史浏览方面。它不仅和仅和Bash shell提示符兼容,而且还提供比提示符兼容,而且还提供比Bash shell更多的提示符参数。更多的提示符参数。l(6)pdksh:它是一个专门为:它是一个专门为Linux系统编写的系统编写的Korn shell(ksh)的扩展版本。的扩展版本。Ksh是一个商用是一个商用shell,不能免,不能免费提供,而费提供,而pdksh是免费的。是免费的。华中农业大学信息学院计算机科学系表表1 Linux1 Linux中的各种中的各种shellshell shel
14、l shell 名称描述名称描述 位置位置 ash ash 一个小一个小shellshell(和(和shsh类似)类似) /bin/ash/bin/ash ash.static ash.static 一个不依靠软件库的一个不依靠软件库的ashash版本版本 /bin/ash.static/bin/ash.static bash BourneAgainShell /bin/bash bash BourneAgainShell /bin/bash bash2 BourneAgainShell bash2 BourneAgainShell的新版本的新版本 /bin/bash2/bin/bash2 b
15、sh ash bsh ash的一个符号链接的一个符号链接 /bin/bsh/bin/bsh csh Cshell,tcsh csh Cshell,tcsh的一个符号链接的一个符号链接 /bin/csh/bin/csh ksh ksh 公共域受限制的公共域受限制的shell(shell(针对网络操作针对网络操作) /usr/bin/ksh) /usr/bin/ksh sh bash sh bash的一个符号链接的一个符号链接 /bin/sh/bin/sh tcsh tcsh 和和cshcsh兼容的兼容的shell /bin/tcshshell /bin/tcsh zsh zsh 一个和一个和cs
16、h,kshcsh,ksh和和shsh兼容的兼容的shell /bin/zshshell /bin/zsh1.1 Shell概述概述华中农业大学信息学院计算机科学系1.1 Shell概述概述判断登入判断登入shelll使用使用echo命令来查询系统的命令来查询系统的“SHELL”环境变量,环境变量,命令如下:命令如下:#echo $SHELL华中农业大学信息学院计算机科学系1.1 Shell概述概述暂时变更暂时变更shelll除非是在受限的除非是在受限的shell中中,否则若要变更使用否则若要变更使用shell,只要执行该只要执行该Shell程序名称程序名称(shell_name),即可切,即可
17、切换到不同的换到不同的Shell。如:。如:sh(或(或csh等等)等等)l此处的此处的shell_name是指是指shell的名称的名称(例如,例如,sh或或csh)。暂时变更。暂时变更shell,可在其它的,可在其它的shell中进行试中进行试验。验。l键入键入exit或或CTRL-D可以回到原始的可以回到原始的shell中。中。华中农业大学信息学院计算机科学系1.1 Shell概述概述华中农业大学信息学院计算机科学系1.1 Shell概述概述Shell功能介绍功能介绍l交互式处理(交互式处理(Interactive Processing)接收来自用户输入的命令后,接收来自用户输入的命令后
18、,shell 会根据命会根据命令类型的不同来执行,执行完毕后,令类型的不同来执行,执行完毕后,shell 会会将结果回传给用户,并等待用户下一次输入。将结果回传给用户,并等待用户下一次输入。用户执行用户执行exit 或是按或是按 Ctrl+D 来注销来注销 shell 才会才会结束。结束。华中农业大学信息学院计算机科学系1.1 Shell概述概述l命令补全功能命令补全功能指用户输入命令后,有时指用户输入命令后,有时不需输入完整的命不需输入完整的命令令,而系统会自动找出最符合的命令名称,而系统会自动找出最符合的命令名称,这种功能可以节省输入长串命令的时间。这种功能可以节省输入长串命令的时间。不需
19、要输入不需要输入完整的文件名完整的文件名,只需输入开头几,只需输入开头几个字母,然后个字母,然后按按Tab键键时候,系统会补充完整,时候,系统会补充完整,连续按连续按两次两次Tab(Esc)键系统会显示所有符)键系统会显示所有符合输入前缀的文件名称。合输入前缀的文件名称。若忘了若忘了命令的全名命令的全名,而只记得命令的开头字,而只记得命令的开头字母,按母,按Tab键一次会补充完整,连续按两次键一次会补充完整,连续按两次Tab(Esc)键系统会显示所有符合输入前缀)键系统会显示所有符合输入前缀的命令名称。的命令名称。华中农业大学信息学院计算机科学系1.1 Shell概述概述l查阅历史记录查阅历史
20、记录history命令命令在在Linux系统上输入命令并按下系统上输入命令并按下Enter后,这个后,这个命令就会存放在命令记录表命令就会存放在命令记录表 ( /.bash_history )中,预定的记录为中,预定的记录为1000笔,这些都定义在环境笔,这些都定义在环境变量中。变量中。列出所有的历史记录:列出所有的历史记录:#history只列出最近只列出最近5笔记录犯例:笔记录犯例:#history5使用命令记录号码执行命令:使用命令记录号码执行命令:#!561重复执行上一个命令:重复执行上一个命令:#!执行最后一次以执行最后一次以ls开头的命令:开头的命令:#!ls华中农业大学信息学院计
21、算机科学系1.1 Shell概述概述l别名(别名(Alias)功能)功能查询目前系统所有别名:查询目前系统所有别名:#alias设置别名:设置别名:#alias dir=ls-l使用别名:使用别名:#dir /etc取消别名取消别名: #unalias diralias命令的效力仅限于该次登录,在注销命令的效力仅限于该次登录,在注销系统后,这个别名的定义就会消失。如果系统后,这个别名的定义就会消失。如果希望每次登陆都使用这些别名,则应该将希望每次登陆都使用这些别名,则应该将别名的设置加入别名的设置加入“/.bashrc”文件中,若是文件中,若是写入写入“/etc/bashrc”文件中,则系统上
22、的所文件中,则系统上的所有用户都能使用这个别名。有用户都能使用这个别名。华中农业大学信息学院计算机科学系1.2 创建和执行创建和执行shell程序程序不同的不同的 shell 其编程其编程(命令命令)语法有所不同语法有所不同l较常见的较常见的 shell 脚本是脚本是 bashl另一种较常见的另一种较常见的 shell 脚本是脚本是 tcsh,其命令,其命令/语法类语法类似似 C 语言语言学习脚本编程的原因学习脚本编程的原因l在有些场合,在有些场合,希望一些常用的希望一些常用的命令集能命令集能用用一一个个命命令令实现实现;l可以可以处理处理一些特定的一些特定的问题问题,如,如计算计算每月上每月
23、上网的总网的总时数。时数。华中农业大学信息学院计算机科学系1.2 创建和执行创建和执行shell程序程序Shell 脚本编程前的准备脚本编程前的准备l文本编辑器文本编辑器(vi 或或 vim,gedit等等)l脚本解释程序脚本解释程序(bash, tcsh等等)l其他工具其他工具 (用来扩充用来扩充Shell 脚本脚本的功能的功能, 如:如:grep, wc)华中农业大学信息学院计算机科学系1.2 创建和执行创建和执行shell程序程序例:显示当前的日期时间、执行路径、用户例:显示当前的日期时间、执行路径、用户账号及所在的目录位置。账号及所在的目录位置。l1. 建立建立 shell 脚本脚本如
24、建立一个名为如建立一个名为 ex1 的的 shell 脚本,可提示脚本,可提示符后输入命令:符后输入命令:$vi ex1.sh华中农业大学信息学院计算机科学系1.2 创建和执行创建和执行shell程序程序在在vi编辑器中输入下列内容:编辑器中输入下列内容: #!/bin/bash #This script is a test! echo n “Date and time is :” date echo n “The executable path is :”$PATH echo “Your name is :whoami” echo -n “Your current directory is
25、:” pwd #endl2. 用三种方法执行用三种方法执行 shell 脚本脚本华中农业大学信息学院计算机科学系1.2 创建和执行创建和执行shell程序程序l(1)输入定向到)输入定向到shell脚本。脚本。其一般形式是:其一般形式是:$bash 脚本名脚本名例如:例如:$bash 。(8)PWD:用户当前工作目录的绝对路径名,该变:用户当前工作目录的绝对路径名,该变量的取值随量的取值随cd命令的使用而变化。它指出用户目前在命令的使用而变化。它指出用户目前在Linux文件系统中处在什么位置。它是由文件系统中处在什么位置。它是由Linux自动设自动设置的。置的。(9)SHELL:用户当前使用的
26、:用户当前使用的shell。它也指出你的。它也指出你的shell解释程序放在什么地方。解释程序放在什么地方。(10)TERM:用户终端类型。:用户终端类型。华中农业大学信息学院计算机科学系1.3 变量变量l$HOME/.bash_profile(/etc/profile)lenv华中农业大学信息学院计算机科学系1.3 变量变量lexport在任何时候,创建的变量都只是当前在任何时候,创建的变量都只是当前Shell的局部变的局部变量,不能被量,不能被Shell运行的其他命令或运行的其他命令或Shell程序所用,程序所用,export命令命令可以将一个局部变量提供给可以将一个局部变量提供给Shel
27、l执行的执行的其他命令使用。其他命令使用。华中农业大学信息学院计算机科学系1.3 变量变量内部变量(预定义变量)内部变量(预定义变量)l内部变量是内部变量是Linux所提供的一种特殊类型的变量,所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在这类变量在程序中用来作出判断。在shell程序内程序内这类变量的值是不能修改的。这类变量的值是不能修改的。l部分内部变量是:部分内部变量是:$# 传送给传送给shell程序的位置参数的个数程序的位置参数的个数$?命令执行后返回的状态命令执行后返回的状态$0当前执行的进程的名称当前执行的进程的名称$*调用调用shell程序时所传送的全部参数成的程
28、序时所传送的全部参数成的单字符串单字符串华中农业大学信息学院计算机科学系1.3 变量变量lex1.sh的示范例子:的示范例子: #ex9_3_1.sh echo “Number of parameters is” $# echo “Program name is” $0 echo “Parameters as a single string is” $* 在在bash中,从命令行中执行中,从命令行中执行ex9_3_1.sh如下:如下: #. ex9_3_1.sh zhang li 将得到如下的结果:将得到如下的结果:华中农业大学信息学院计算机科学系1.3 变量变量用户变量用户变量l1. 变量名
29、变量名用户定义的变量是最普通的用户定义的变量是最普通的shell变量。变量变量。变量名是以字母或下线符开头的字母、数字和下名是以字母或下线符开头的字母、数字和下线符序列,并且大小写字母意义不同线符序列,并且大小写字母意义不同 。在定义变量时,变量名前不应加符号在定义变量时,变量名前不应加符号$,在引,在引用变量的内容时则应在变量名用变量的内容时则应在变量名前加前加$;在给变;在给变量赋值时,等号两边一定量赋值时,等号两边一定不能留空格不能留空格,若变,若变量中本身就包含了空格,则整个字串都要用量中本身就包含了空格,则整个字串都要用双引号括起来。双引号括起来。在编写在编写Shell程序时,为了使
30、变量名和命令名程序时,为了使变量名和命令名相区别,建议所有的相区别,建议所有的变量名变量名都用都用大写字母大写字母来来表示。表示。华中农业大学信息学院计算机科学系1.3 变量变量l2. 变量赋值变量赋值给变量赋值的过程也是声明一个变量的过程。给变量赋值的过程也是声明一个变量的过程。set 显示本地所有的变量显示本地所有的变量变量的赋值很简单,其一般形式是:变量的赋值很简单,其一般形式是:l变量名变量名=字符串字符串/数字数字例如:例如:llcount=0lmyname=fedora有时想在说明一个变量并对它设置为一个特定有时想在说明一个变量并对它设置为一个特定值后就不在改变它的值时,可以用下面
31、的命令值后就不在改变它的值时,可以用下面的命令来保证一个变量的来保证一个变量的只读性只读性:lreadonly 变量名变量名华中农业大学信息学院计算机科学系1.3 变量变量华中农业大学信息学院计算机科学系1.3 变量变量华中农业大学信息学院计算机科学系1.3 变量变量l3. 访问变量值访问变量值可以通过给变量名加上前缀可以通过给变量名加上前缀$(美元符)来访(美元符)来访问变量的值。问变量的值。例如:例如:l如果要把如果要把myname的值分配给变量的值分配给变量yourname,那么可以执行下面的命令:那么可以执行下面的命令:lyourname=$myname华中农业大学信息学院计算机科学系
32、1.3 变量变量l4. 变量清除变量清除unset variable-name例:例:华中农业大学信息学院计算机科学系1.3 变量变量给变量赋值给变量赋值 命令命令 环境环境locunt=0 pdkshlocunt=0 pdksh和和bashbashset locunt=0 tcshset locunt=0 tcshmyname=Sanjiv pdkshmyname=Sanjiv pdksh和和bashbashset name=Sanjiv tcshset name=Sanjiv tcshmyname=myname=Sanjiv GuhaSanjiv Guha pdksh pdksh和和bas
33、hbashset name=set name=Sanjiv GuhaSanjiv Guha tcsh tcsh华中农业大学信息学院计算机科学系1.3 变量变量给变量赋值访问变量值给变量赋值访问变量值 命令命令 环境环境lcount=$var pdkshlcount=$var pdksh和和bashbashset lcount=$var tcshset lcount=$var tcsh华中农业大学信息学院计算机科学系1.4 位置参数位置参数1. 位置参数及引用位置参数及引用l可以编写一个可以编写一个shell脚本,当从命令行或者从其脚本,当从命令行或者从其他他shell脚本中调用它的时候,这个脚
34、本接收若脚本中调用它的时候,这个脚本接收若干参数。这些选项是通过干参数。这些选项是通过Linux作为位置参数作为位置参数(positional parameter)提供给)提供给shell程序的。程序的。l在在shell脚本中应有变量,接收实参,这类变量脚本中应有变量,接收实参,这类变量的名称很特别,分别是的名称很特别,分别是1,2,3,这类变,这类变量称为位置变量。位置参数量称为位置变量。位置参数1存放在位置变量存放在位置变量1中,位置参数中,位置参数2存放位置变量存放位置变量2中,中,在,在程序中可以使用程序中可以使用$1,$2,来访问。来访问。华中农业大学信息学院计算机科学系1.4 位置
35、参数位置参数2. 用用set命令为位置参数赋值命令为位置参数赋值l在在shell程序中可以利用程序中可以利用set命令为位置参数赋命令为位置参数赋值或重新赋值。值或重新赋值。l(1)一般格式:)一般格式:set 参数表参数表l(2)说明:该命令后面无参数时,将显示系)说明:该命令后面无参数时,将显示系统中的系统变量的值;如果有参数将分别给统中的系统变量的值;如果有参数将分别给位置参数赋值。位置参数赋值。华中农业大学信息学院计算机科学系1.4 位置参数位置参数3. 位置参数移动位置参数移动l当位置变量个数超出当位置变量个数超出9个时,就不能直接引用个时,就不能直接引用位置大于位置大于9的位置变量
36、了,必须用的位置变量了,必须用shift命令移命令移动位置参数。动位置参数。l(1)一般形式:)一般形式:shift nl(2)说明:每次执行时,把位置参数向左移)说明:每次执行时,把位置参数向左移动动n位。如果没有参数,每次执行时,把位置位。如果没有参数,每次执行时,把位置参数向左移动参数向左移动1位。位。华中农业大学信息学院计算机科学系1.4 位置参数位置参数下述是一个下述是一个shell程序的程序的ex9_4_1.sh,只带了一只带了一个参数(名字),并在屏幕上显示这个名字:个参数(名字),并在屏幕上显示这个名字:#Name display programif $# -eq 0 then
37、echo“Name not provided”elseecho”Your name is $1”fi华中农业大学信息学院计算机科学系1.4 位置参数位置参数l在在bash中,如果执行中,如果执行ex9_4_1.sh如下:如下:#. ex9_4_1.shl将得到输出:将得到输出:Name not providedl但是,如果执行但是,如果执行ex9_4_1.sh如下:如下:#. ex9_4_1.sh zhangl则得到如下的输出:则得到如下的输出:Your name is zhanglex9_4_1.sh还说明了还说明了shell编程的另一个方面,即编程的另一个方面,即内内部变量部变量。在。在e
38、x9_4_1.sh中的变量中的变量$#是内部变量,并是内部变量,并提供传给提供传给shell程序的位置参数的数目。程序的位置参数的数目。华中农业大学信息学院计算机科学系1.4 位置参数位置参数位置变量小结位置变量小结l位置变量表示位置变量表示$0,$1$9l在脚本中使用位置参数在脚本中使用位置参数l向系统命令传递参数向系统命令传递参数$0$1$2$3$4$5$6$7$8$9脚本脚本名字名字ABCDEF华中农业大学信息学院计算机科学系1.4 位置参数位置参数华中农业大学信息学院计算机科学系1.5 特殊字符特殊字符特殊字符中的某些字符特殊字符中的某些字符 字符字符 说明说明 $ $ 指出指出she
39、llshell变量名的开始变量名的开始 | | 把标准输出通过管道传送到下个命令把标准输出通过管道传送到下个命令 # # 标记注释开始标记注释开始 & & 在后台执行进程在后台执行进程 ? ? 匹配一个字符匹配一个字符 * * 匹配一个或几个字符匹配一个或几个字符 输出重定向操作符输出重定向操作符 输出重定向操作符输出重定向操作符 添加到文件添加到文件 sort.outpwd path.out newfilel重定向标准输入重定向标准输入sort filesort name.out华中农业大学信息学院计算机科学系1.5 特殊字符特殊字符华中农业大学信息学院计算机科学系1.5 特殊字符特殊字符华
40、中农业大学信息学院计算机科学系1.6 运算符运算符运算符是对计算机发的指令运算符是对计算机发的指令运算对象运算对象l数字、字符数字、字符l变量变量l表达式表达式表达式:运算符和运算对象的组合体表达式:运算符和运算对象的组合体华中农业大学信息学院计算机科学系1.6 运算符运算符$ 表示形式告诉表示形式告诉 shell 对方括号中的表达对方括号中的表达式求值式求值l$ 2+8华中农业大学信息学院计算机科学系1.6 运算符运算符l赋值运算符赋值运算符=、+=、-=、*=、/=、%=、&=、=、|=、=华中农业大学信息学院计算机科学系1.6 运算符运算符表达式替换表达式替换l$ 和和 $()两种格式功
41、能一样,所有的两种格式功能一样,所有的 shell 的求值都是的求值都是用整数完成用整数完成l$ 可以接受不同基数的数字可以接受不同基数的数字 base#n n 表示基数从表示基数从 2 到到 36 的任何基数的任何基数华中农业大学信息学院计算机科学系1.7 输入和输出输入和输出echolecho 命令可以显示文本行或变量,或者把命令可以显示文本行或变量,或者把字符串输入到文件。字符串输入到文件。lecho option string-e 解析转义字符解析转义字符-n 回车不换行,回车不换行,linux系统默认回车换行系统默认回车换行转义符(转义符(c, f, t, n , a)c 不换行不换
42、行,f 进纸进纸,t 跳格跳格,n 换行换行, a 响铃响铃 。华中农业大学信息学院计算机科学系1.7 输入和输出输入和输出华中农业大学信息学院计算机科学系1.7 输入和输出输入和输出readlread 语句可以从键盘或文件的某一行文本语句可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。中读入信息,并将其赋给一个变量。lread varible1 varible2 如果只指定了一个变量,那么如果只指定了一个变量,那么 read 将会把将会把所有的输入赋给该变量,直到遇到第一个所有的输入赋给该变量,直到遇到第一个文件结束符或回车;文件结束符或回车;如果给出了多个变量,它们按顺序分别被
43、如果给出了多个变量,它们按顺序分别被赋予不同的变量。赋予不同的变量。Shell 将用空格作为变量将用空格作为变量之间的分隔符。之间的分隔符。华中农业大学信息学院计算机科学系1.7 输入和输出输入和输出华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较shell程序中的程序中的test命令命令l在在bash/pdksh中,命令中,命令test用于计算一个条用于计算一个条件表达式的值。他们经常在条件语句和循件表达式的值。他们经常在条件语句和循环语句中被用来判断某些条件是否满足。环语句中被用来判断某些条件是否满足。ltest命令的语法格式命令的语法格式: test expression
44、 或者或者 expression华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较1. 数字比较数字比较l-eq 比较两个数是否相等比较两个数是否相等l-ne 比较两个数是否不等比较两个数是否不等l-gt 比较一个数是否大于另一个数比较一个数是否大于另一个数l-ge 比较一个数是否大于或是等于另一个数比较一个数是否大于或是等于另一个数l-lt 比较一个数是否小于另一个数比较一个数是否小于另一个数l-le 比较一个数是否小于或是等于另一个数比较一个数是否小于或是等于另一个数华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较例例华中农业大学信息学院计算机科学系1.8 表
45、达式的比较表达式的比较2. 字符串比较字符串比较l= 比较两个字符串是否相等,同则为比较两个字符串是否相等,同则为“是是”l!= 比较两个字符串是否不相等,不同则为比较两个字符串是否不相等,不同则为“是是”l-z 判断字符长度是否等于零,等于则为判断字符长度是否等于零,等于则为“是是”l -n 判断字符长度是否大于零,大于零则为判断字符长度是否大于零,大于零则为“是是”华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较示例代码示例代码华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较运行结果运行结果华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较3.
46、 文件操作符文件操作符l-e 如果文件存在则为真如果文件存在则为真l-r 确定是否对文件设置了读许可确定是否对文件设置了读许可l-w 确定文件是否设置了写许可确定文件是否设置了写许可l-x 确定文件是否设置了执行许可确定文件是否设置了执行许可l-s 确定文件是否具有大于零的长度确定文件是否具有大于零的长度l-d 确定文件是否为目录确定文件是否为目录l-f 确定文件是否为普通文件确定文件是否为普通文件l-L 确定文件是否为符号连接文件确定文件是否为符号连接文件华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较例例华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较4.
47、逻辑操作符逻辑操作符l逻辑操作符用来根据逻辑规则比较表达式。逻辑操作符用来根据逻辑规则比较表达式。!,-a,-o字符表示字符表示NOT、AND和和ORl! 求反(求反(”非非”)逻辑表达式)逻辑表达式l-a 逻辑逻辑AND(”与与”)两个逻辑表达式)两个逻辑表达式l-o 逻辑逻辑OR(”或或”)两个逻辑表达式)两个逻辑表达式华中农业大学信息学院计算机科学系1.8 表达式的比较表达式的比较例例华中农业大学信息学院计算机科学系1.9 流程控制语句流程控制语句一、条件语句一、条件语句二、循环语句二、循环语句三、杂项语句三、杂项语句华中农业大学信息学院计算机科学系1.9 流程控制语句流程控制语句一、条
48、件语句一、条件语句一、条件语句一、条件语句l1. if 语句语句l2. case 语句语句华中农业大学信息学院计算机科学系1.9 流程控制语句流程控制语句一、条件语句一、条件语句1. if 语句语句lif语句通过判断逻辑表达式来作出选择,在语句通过判断逻辑表达式来作出选择,在bash中的条件语句有如下的格式:中的条件语句有如下的格式:if expression; then statementselif expression; then statements else statementsfilif 条件是可以嵌套的。条件是可以嵌套的。华中农业大学信息学院计算机科学系1.9 流程控制语句流程控制
49、语句一、条件语句一、条件语句2. case 语句语句lcase 语句是用来执行依赖于离散值或是匹配语句是用来执行依赖于离散值或是匹配指定变量值的范围的语句。指定变量值的范围的语句。lbash 的的 case 语句如下:语句如下:case str instr1|str2) statements;str3|str4) statements;*) statements;esac每个条件下用每个条件下用双分号(双分号(;)来终止语句!来终止语句!华中农业大学信息学院计算机科学系1.9 流程控制语句流程控制语句一、条件语句一、条件语句华中农业大学信息学院计算机科学系1.9 流程控制语句流程控制语句二、循
50、环语句二、循环语句循环语句:用于重复执行一系列命令。循环语句:用于重复执行一系列命令。l一)一) for 语句语句l二)二) until 语句语句l三)三) while 语句语句l四)四) select 语句语句华中农业大学信息学院计算机科学系一)for语句语句l1.第一种格式如下:第一种格式如下:for 变量名变量名i n列表列表d ol命令命令1l命令命令2 d o n e当变量值在列表里,当变量值在列表里, for循环即执行一次所有循环即执行一次所有命令,使用变量名访问列表中取值。命令可命令,使用变量名访问列表中取值。命令可为任何有效的为任何有效的shell命令和语句。变量名为任命令和语
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。