Linux下Shell编程.ppt_第1页
Linux下Shell编程.ppt_第2页
Linux下Shell编程.ppt_第3页
Linux下Shell编程.ppt_第4页
Linux下Shell编程.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux下Shell编程简介,10/24/11,内容安排,综述篇 命令篇 变量篇 条件测试篇 控制结构篇 函数篇,10/24/11,综述篇,Shell是什么 怎样写Shell Cygwin简介 Linux黑洞,10/24/11,综述篇Shell是什么,壳(Shell)保护其内部的核(Kernel),10/24/11,综述篇Shell是什么,Shell是一种具备特殊功能的程序, 它是介于使用者和 UNIX/Linux 操作系统之核心程序(kernel)间的一个接口。 为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳(shell)。用户向shell提出请

2、求,shell解释并将请求传给内核。 使用较广的shell有标准的Bourneshell(sh)、Korn Shell(ksh)、Cshell(csh)、Bourne Again Shell(bash)等。 查看当前环境所用shell:echo $SHELL shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。 本质上,shell脚本是命令行命令简单的组合到一个文件里面。Shell基本上是一个命

3、令解释器,类似于DOS下的。它接收用户命令,然后调用相应的应用程序。,10/24/11,综述篇怎样写Shell,利用vi编辑器编辑脚本,将脚本命名为脚本功能.sh Shell脚本不是复杂的程序,它是按行解释的,脚本第一行总是以#!/bin/sh 开头,它通知系统以下的Shell程序使用系统上的Bourne Shell来解释。 第二行注释中写入脚本名,第三行注释开始写入脚本功能习惯。 以下行进入脚本正式编写 编写完后给脚本添加执行权限: chmod u+x ScripName 运行脚本:ScripName 或 ./ScripName,简单脚本示例: vi ShowHello.sh 以下为脚本内容

4、: #!/bin/sh #ShowHello.sh #To show hello to somebody echo -n“Enter Your Name:” read NAME echo “Hello,$NAME!” 保存,退出vi编辑器。 为脚本添加可执行权限: chmod u+x ShowHello.sh 运行脚本:ShowHello.sh,10/24/11,综述篇cygwin简介,cygwin在windows下开发linux程序! cygwin是一个在windows平台上运行的linux模拟环境,是cygnus solutions公司开发的自由软件。它把gcc、gdb、gas等开发工具进

5、行了改进,使它们能够生成并解释win32的目标文件,开发者基于win32 api写了一个unix系统库的模拟层 ,只要把这些工具的源代码和这个共享库(cygwin dll )连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集 。 软件下载:cygwin的官方网站: 推荐下载: 软件安装:在安装的过程中可选择默认安装路径:c:cygwin 安装完后要修改cygwin目录下的cygwin.bat文件,在echo off 后面加上set CYGWIN=title ntea,这是因为Cygwin的启动批处理 文件需要启动Unix文件系统模拟。,10/24/11

6、,综述篇Linux黑洞,/dev/null 是一个虚设的设备,俗称“Linux黑洞”,任何对/dev/null的写入都会成功,但数据会消失得无影无踪,没有任何反馈。所以经常把不想在屏幕显示的信息全部送到/dev/null中,在shell脚本中用得比较多。 如:ls l /dev/null 还可以用来清空文件的内容:cat /dev/null FileName,10/24/11,命令篇,用户管理 目录管理 文件管理 权限管理,10/24/11,命令篇用户管理,新建用户(user add) useradd UserName 新建用户后,会在/home目录下建立一个以UserName命名的文件夹,用

7、户每次登录时自动定位到该文件夹下。 为用户添加密码(password) passwd UserName 删除用户(user delete) userdel UserName 使用p选项可以删除用户目录下的文件及与用户相关联的其他文件。 新建组群(group add) groupadd GroupName 删除组群(group delete) groupdel GroupName,10/24/11,命令篇用户管理,用户身份 whoami 查看登录用户 who 选项 -a 显示所有用户的所有信息 -H 显示列标题 查看用户的操作 w 某一时刻用户的行为 用户间切换(substitute user)

8、 su UserName 如:su 或su root 切换为根用户 su Haison 切换为名为Haison的用户,10/24/11,命令篇目录管理,创建目录(make directory) mkdir DirecName 删除目录(remove directory) rmdir DirecName 显示工作目录(print working directory) pwd 显示目录内容(list) ls 选项 选项:-a 显示当前目录下的所有文件,包括以.开头的文件。 -l 以长列表的形式显示文件列表,如: -rw-r-r- 1 haison haison 18 Nov 2 10:10 hai

9、son.c,10/24/11,命令篇目录管理,改变当前目录(change directory) cd 或 cd 进入登录时的主目录 cd / 进入根目录 cd . 进入上一级目录 cd /home 进入系统的home目录 cd home 进入当前目录下的home目录 目录重命名(move) mv SourceDirecName TargetDirecName 目录拷贝(copy) cp SourceDirec TargetDirec -r 拷贝目录下的文件、子目录及子目录下的文件,10/24/11,命令篇文件管理,新建文件 FileName 或 touch FileName 或 vi File

10、Name 删除文件(remove file) rm 选项 FileName 选项:-i 系统提示是否真要删除该文件 -f 删除文件之前不提示任何确认信息 -r 递归删除目录下所有子目录的内容 文件拷贝(copy) cp SourceFile TargetFile 文件链接(link) ln s SourceFile TargetFile 创建文件链接,用ls l查看,会看到TargetFile-SourceFile,10/24/11,命令篇文件管理,显示文件内容 more FileName 一次一屏的显示文件内容,空格或回车显示下一屏 less FileName 一次一屏的显示文件内容,空格或

11、回车显示下一屏 cat FileName 一次全部显示文件的内容 cat file1 file2file3 将file1、file2的内容写到file3,覆盖file3原内容 cat file1file2 将file1的内容追加到file2,file2原内容不变 head FileName 只显示文件的前10行 head n FileName 显示文件的前n行 tail FileName 只显示文件的后10行 tail n FileName 显示文件的后n行 nl FileName 以编号的形式一次全部显示文件的内容,忽略空格,10/24/11,命令篇文件管理,文件移动/重命名(move) m

12、v SourceFile TargetFile 将一个或多个文件移动到另外一个目录下,或者将一个文件重命名为另一个文件。 文件查找(find) find 路径 选项 如:find / -name “Linux” -print 文件内容查找(grep) 如:grep “main” haison.c 文件类型 命令ls l以长列表形式显示文件的类型等,如:-rw-r-r-,10/24/11,命令篇权限管理,文件访问权限 一个文件一经创建,就具有三种访问方式,一个文件由1个类型和9个权限位来描述,9个权限位分为3组,每组3个权限位,具体表示如下所示:,10/24/11,命令篇权限管理,改变文件/目录

13、的权限(change mode) chmod u/g/o/a +/-/= 权限 FileName/DirecName 其中:+:增加指定的权限 -:去掉指定的权限 =:清除所选的权限并将其设置为制定的权限 chmod允许使用八进制符号作为模式,改变权限。 chmod PermissionCode FileName/DirecName 其中, PermissionCode 按如下方式计算,4+2+1=7,4+2=6,4+1=5,所以该文件/目录具有的权限为:765,10/24/11,命令篇权限管理,chmod命令示例 假定haison.c最初具有这样的权限rwxrwxrwx,连续操作如下,10/

14、24/11,命令篇权限管理,-rw-r-r- 1 haison haison 18 Nov 2 10:10 haison.c 改变文件/目录的属主(change owner) chown Owner FileName/DirecName 如:chown Dave haison.c 改变文件/目录的属组(change group) chgrp Group FileName/DirecName 如:chgrp Dave haison.c 改变文件/目录的属主和属组 chown owner:group FileName/DirecName 如:chown Dave:Dave haison.c,10/

15、24/11,变量篇,变量可以定制用户本身的工作环境,使用变量可以保存有用信息,使系统获知用户相关设置,也用于保存暂时信息。 变量一般都用大写字母表示 使用 echo命令可以显示单个变量的取值,要在变量名前面加$ 如:USER=“haison” echo $USER 如果设置变量时,不想再改变其值,可以将其设置为只读,只要在变量名前加readonly 使用set命令可以显示所有本地定义的shell变量 使用unset 变量名可以清除对变量的定义,10/24/11,变量篇,10/24/11,变量篇,示例: #!/bin/sh #VarTest.sh #To test the variables U

16、SER=haison echo Hello,$USER,the output of this script are as follows: echo The script name is :basename $0 echo The first param of the script is :$1 echo The second param of the script is :$2 echo The tenth param of the script is :$10 echo All the params you input are :$* echo The number of the para

17、ms you input are:$# echo The process ID for this script is :$ echo The exit status of this script is :$?,Bash 变量是不分类型的,本质上,Bash 变量都是字符串. 但是依赖于上下文,Bash 也允许比较操作和算术操作.决定这些的关键因素就是,变量中的值是否只有数字. a=879 echo The value of a is $a.“ # 使用let 赋值 let a=a+5,10/24/11,计算语句,let : let z=5*2 运算符: + - * / % * expr : 字符

18、串运算 expr length $string :长度 expr index $string $substring 匹配到子串的第一个字符的位置. 随机数: mm=$RANDOM,引用变量,在一个双引号中直接使用变量名,一般都是没有问题的.它阻止了所有在引号中的特殊字符的 重新解释-包括变量名 -但是$,和除外 保留$,作为特殊字符的意义,是为了能够在双引号中也能够正常地引用变量($var).这样在中可以使用变量所表达的值. 使用“”来防止单词分割.如果在参数列表中使用双引号,将使得双引号中的参数作为一个参数.即使双引号中的字符串包含多个单词(也就是包含空白部分),也不会变为多个参数,如:,1

19、0/24/11,variable1=a variable containing five words“ COMMAND This is $variable1 COMMAND This is $variable1,10/24/11,单引号操作总体上和” ”很像,但不允许引用变量.因为$的特殊含义被关闭了.在中除了,其他字符都没有特殊的含义了.所以单引号比双引号严格. 因为即使是,在中都被关闭了,所以你想在中显示的含义,将得不到预期的效果.,10/24/11,#!/bin/bash var=abc echo why cant write echo why cant echo $var echo $

20、var echo $var echo date,10/24/11,转义字符,“ 表达引号本身 $ $号本身,跟在$后的变量名,将不能扩展 号本身. n 意味着新的一行 r 回车 t tab 键 v vertical tab(垂直tab),查前边的Ctl-K b backspace,查前边的Ctl-H a alert(如beep 或flash) echo $n,10/24/11,特殊字符,# 注释,行首以#开头为注释(#!是个例外). ; 命令分隔符,可以用来在一行中来写多个命令. ; 终止case选项. 后置引用,命令替换 命令的输出可以被当成传递到另一个命令的参数, 或者保存到变量中, sc

21、ript_name=basename $0 xxx,yyy,zzz.大括号扩展,如: cat file1,file2,file3 combined_file 把file1,file2,file3 连接在一起,并且重定向到combined_file 中. :匹配括号内所有字符的任一字符, a-z, abd,或做测试,或数组,10/24/11, then命令 fi,或,格式3 if 条件 then 命令1 else 命令2 fi,格式4 if 条件1 then 命令1 elif 条件2 then 命令2 else 命令3 fi,示例 #!/bin/sh #ifTest #to show the m

22、ethod of if echo -e Enter the first integer:c read FIRST echo -n Enter the second integer: read SECOND if $FIRST -gt $SECOND then echo $FIRST is greater than $SECOND elif $FIRST -gt $SECOND then echo $FIRST is less than $SECOND else echo $FIRST is equal to $SECOND fi,10/24/11,控制结构篇case语句,格式 case 值 i

23、n 模式1) 命令1 ; *) 命令n ; esac 取值后面必须为单词in,每一个模式必须以右括号 结束。取值可以为变量或常数。取值检测匹配的 每一个模式,一旦模式匹配,其间所有命令开始 执行直至;。执行完匹配模式相应命令后不再继 续其他模式。如果无一匹配模式,使用*号捕获 该值,再接受其他输入。,示例 #!/bin/sh #caseTest #to test the method of case USER=whoami case $USER in root)echo “You can do all the operations” ; Dave)echo You can do some op

24、erations” ; *)echo Sorry,you can not do anything ; esac,10/24/11,控制结构篇for循环,格式 for 变量名 in 列表 do 命令 done 当变量值在列表里,for循环即执行 一次所有命令,使用变量名访问列 表中取值。 嵌套循环可以将一个for循环嵌在 另一个for循环里 For会自动分隔字符串(以空格),示例 #!/bin/sh #forTest #to test the method of for COUNTER=0 for FILES in * do COUNTER=expr $COUNTER + 1 done echo

25、 There are $COUNTER files in pwd ,10/24/11,控制结构篇until循环,格式 until 条件 do 命令 done until 执行一系列命令,直至条件为真 时停止,示例 #!/bin/sh #untilTest #to test the mothod of until IS_ROOT=who|grep root until IS_ROOT do IS_ROOT=who|grep root sleep 5 done echo Watch it.root in!,10/24/11,控制结构篇while循环,格式 while 命令 do 命令 done W

26、hile循环用于不断执行一系列命令, 也用于从输入文件中读取数据。虽然 通常只有一个命令,但在while和do之 间可以放几个命令。命令通常用作测 试条件,只有当命令的退出状态为0 时,do和done之间命令才被执行,如 果退出状态不是0,则循环终止。,示例 #!/bin/sh #whileTest #to test the method of while COUNTER=0 while $COUNTER -lt 10 do echo $COUNTER COUNTER=expr $COUNTER + 1 done while read LINE do echo $LINE done names

27、.txt,10/24/11,函数篇,格式 函数名 () 命令 所有函数在使用前必须定义,这意味着必 须将函数放在脚本开始部分,直至shell解释 器首次发现它,才可以使用。 调用函数仅使用其函数名即可,示例1 #!/bin/sh #funTest #to test the function useage() echo “useage basename $0 -l filename” exit useage,行编辑,s e d是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。 sed 2,4p abc.txt

28、ls l | sed 1,3p,s e d在文件中定位文本的方式,X x为一行号,如1 x , y 表示行号范围从x到y,如2,5表示从第2行到第 / p a t t e r n / 查询包含模式的行。例如/ d i s k /或/a-z/ / p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k / d i s k s / p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3 x , / p a t t e r n / 通过行号和模式查询匹配行。3 . / v d u / x ,

29、 y ! 查询不包含指定行号x和y的行。1 , 2 !,sed编辑命令,p 打印匹配行 = 显示文件行号 a 在定位行号后附加新文本信息 i 在定位行号后插入新文本信息 d 删除定位行 c 用新文本替换定位文本 s 使用替换模式替换相应模式 r 从另一个文件中读文本 w 写文本到一个文件 q 第一个模式匹配完成后推出或立即推出 l 显示与八进制A S C I I代码等价的控制字符 在定位行执行的命令组 n 从另一个文件中读文本下一行,并附加在下一 g 将模式2粘贴到/pattern n/ y 传送字符 n 延续到下一输入行;允许跨行的模式匹配语句,Sed不会对源文件做改变,sed 1d 删除第一行 sed $d 删除最后一行 sed s/night/NIGHT/ 把night替换为NIGHT sed s/$/ 删除$符号 sed s/$/g 删除全部$符号(上面只删除每行第一个) sed s/0-9/g 删除行首都数字 sed s/$/ Passed/g 给每行末尾增加passed sed 1,$ a pass 每行下面增加一行pass,awk,如果要格式化报文或从一个大的文本文件中抽取数据包,那么 a w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论