linux 下 shell 编程简介

36
Linux Linux Shell Shell 下下下下 下下下下 刘刘刘 刘刘刘 刘刘刘刘刘 刘刘刘刘刘刘刘刘刘刘 刘刘 (西 ,西西 刘刘刘刘刘 刘刘刘刘刘刘刘刘刘刘 刘刘 (西 ,西西 710048 710048

Upload: akando

Post on 15-Jan-2016

101 views

Category:

Documents


0 download

DESCRIPTION

Linux 下 Shell 编程简介. 刘桂海 ( 西安理工大学 计算机科学与工程学院,陕西 西安 710048 ). Linuxidc.com. Linux 公社( LinuxIDC.com )于 2006 年 9 月 25 日注册并开通网站, Linux 现在已经成为一种广受关注和支持的一种操作系统, IDC 是互联网数据中心, LinuxIDC 就是关于 Linux 的数据中心。 LinuxIDC.com 提供包括 Ubuntu , Fedora , SUSE 技术,以及最新 IT 资讯等 Linux 专业类网站。. 内容安排. 综述篇 命令篇 变量篇 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linux 下 Shell 编程简介

LinuxLinux下下 ShellShell编程简编程简介介

刘桂海刘桂海

( 西安理工大学 计算机科学与工程学院,陕西 西安 ( 西安理工大学 计算机科学与工程学院,陕西 西安 710047100488 ))

Page 2: Linux 下 Shell 编程简介

Linuxidc.comLinuxidc.com

LinuxLinux 公社(公社( LinuxIDC.comLinuxIDC.com )于)于 20062006年年 99 月月 2525 日注册并开通网站,日注册并开通网站, LinuxLinux 现在现在已经成为一种广受关注和支持的一种操作系已经成为一种广受关注和支持的一种操作系统,统, IDCIDC 是互联网数据中心,是互联网数据中心, LinuxIDCLinuxIDC 就就是关于是关于 LinuxLinux 的数据中心。的数据中心。

LinuxIDC.comLinuxIDC.com 提供包括提供包括UbuntuUbuntu,, FedoraFedora,, SUSESUSE 技术,以及最技术,以及最新新 ITIT 资讯等资讯等 LinuxLinux 专业类网站。专业类网站。

23/4/21 西安理工大学计算机科学与工程学院

Page 3: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

内容安排内容安排

综述篇综述篇命令篇命令篇变量篇变量篇条件测试篇条件测试篇控制结构篇控制结构篇函数篇函数篇

Page 4: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

综述篇综述篇ShellShell 是什么是什么怎样写怎样写 ShellShell

CygwinCygwin 简介简介LinuxLinux 黑洞黑洞

Page 5: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

综述篇综述篇———— ShellShell 是什么是什么 壳壳 ((ShellShell)) 保护其内部的核保护其内部的核 ((KernelKernel) )

Page 6: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

综述篇综述篇———— ShellShell 是什么是什么 ShellShell 是一种具备特殊功能的程序, 它是介于使用者和 是一种具备特殊功能的程序, 它是介于使用者和 UNIX/Linux UNIX/Linux

操作系统之核心程序(操作系统之核心程序( kernelkernel )间的一个接口。)间的一个接口。 为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造

成损害,在内核的周围建了一个外壳成损害,在内核的周围建了一个外壳 ((shellshell)) 。用户向。用户向 shellshell 提出请提出请求,求, shellshell 解释并将请求传给内核。解释并将请求传给内核。

使用较广的使用较广的 shellshell 有标准的有标准的 Bourne shell (sh)Bourne shell (sh)、、 Korn Shell(ksh)Korn Shell(ksh)、、C shell (csh)C shell (csh)、、 Bourne Again Shell(bash)Bourne Again Shell(bash) 等等。。

查看当前环境所用查看当前环境所用 shellshell:: echo $SHELLecho $SHELL shellshell 的另一个重要特性是它自身就是一个解释型的程序设计语的另一个重要特性是它自身就是一个解释型的程序设计语

言,言, shellshell 程序设计语言支持绝大多数在高级语言中能见到的程序元程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。素,如函数、变量、数组和程序控制结构。 shellshell 编程语言简单易学,编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的任何在提示符中能键入的命令都能放到一个可执行的 shellshell 程序中程序中。。

本质上,本质上, shell shell  脚本是命令行命令简单的组合到一个文件里脚本是命令行命令简单的组合到一个文件里面。面。 ShellShell 基本上是一个命令解释器,类似于基本上是一个命令解释器,类似于 DOSDOS 下的下的command.comcommand.com 。它接收用户命令,然后调用相应的应用程序。。它接收用户命令,然后调用相应的应用程序。

Page 7: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

综述篇综述篇————怎样写怎样写 ShellShell

利用利用 vivi 编辑器编辑脚本,将脚本命名为编辑器编辑脚本,将脚本命名为脚本功能脚本功能 .sh.sh

ShellShell 脚本不是复杂的程序,它是按行解脚本不是复杂的程序,它是按行解释的,脚本第一行总是以 释的,脚本第一行总是以  #!/bin/sh#!/bin/sh 开头,它通知系统以下的开头,它通知系统以下的 ShellShell 程序使程序使用系统上的用系统上的 Bourne ShellBourne Shell 来解释。来解释。

第二行注释中写入脚本名,第三行注释第二行注释中写入脚本名,第三行注释开始写入脚本功能开始写入脚本功能————习惯。习惯。

以下行进入脚本正式编写以下行进入脚本正式编写 编写完后给脚本添加执行权限:编写完后给脚本添加执行权限: chmod u+x ScripNamechmod u+x ScripName 运行脚本:运行脚本: ScripNameScripName

或 或 ./ScripName./ScripName

简单脚本示例:简单脚本示例:vi ShowHello.shvi ShowHello.sh以下为脚本内容以下为脚本内容:#!/bin/sh#ShowHello.sh#To show hello to somebodyecho -n“Enter Your Name:”read NAMEecho “Hello,$NAME!” 保存,退出保存,退出 vivi 编辑器。编辑器。为脚本添加可执行权限:为脚本添加可执行权限:chmod u+x chmod u+x ShowHello.shShowHello.sh运行脚本:运行脚本: ShowHello.shShowHello.sh

Page 8: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

综述篇综述篇———— cygwincygwin 简介简介cygwincygwin————在在 windowswindows 下开发下开发 linuxlinux 程序程序 !! cygwincygwin 是一个在是一个在 windowwindowss 平台上运行的平台上运行的 linuxlinux 模拟环境,是模拟环境,是 cygnus cygnus solutionssolutions 公司开发的自由软件公司开发的自由软件。它。它把把 gccgcc、、 gdbgdb、、 gasgas 等开发工具进行了改进,等开发工具进行了改进,使它们能够生成并解释使它们能够生成并解释 win32win32 的目标文件,开发者的目标文件,开发者基于基于 win32win32 apiapi 写了一个写了一个 unixunix系统库的模拟层 ,只要把这些工具的源代码和这个共享库系统库的模拟层 ,只要把这些工具的源代码和这个共享库 ((cygwin dllcygwin dll ) )连接到一连接到一起,就可以使用起,就可以使用 unixunix主机上的交叉编译器来生成可以在主机上的交叉编译器来生成可以在 windowswindows 平台上运行的工平台上运行的工具集 。具集 。 软件下载:软件下载: cygwincygwin 的官方网站的官方网站 ::www.cygwin.comwww.cygwin.com

推荐下载:推荐下载: http://www.macraigor.com/full_gnu.htmhttp://www.macraigor.com/full_gnu.htm

 软件安装: 软件安装:在安装的过程中可选择默认安装路径:在安装的过程中可选择默认安装路径: c:\cygwinc:\cygwin

安装完后要修改安装完后要修改 cygwincygwin 目录下的目录下的 cygwin.batcygwin.bat 文件文件 ,,在在@echo @echo off off

后面加上后面加上 set CYGWIN=title nteaset CYGWIN=title ntea ,这是因为,这是因为 CygwinCygwin 的启动批的启动批处理处理 文件需要启动文件需要启动 UnixUnix 文件系统模拟。文件系统模拟。

Page 9: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

综述篇综述篇———— LinuxLinux 黑洞黑洞 /dev/null/dev/null 是一个虚设的设备,俗是一个虚设的设备,俗称称““ LinuxLinux 黑洞黑洞”” ,, 任何任何对对 //devdev//nullnull 的写入都会成的写入都会成功,但数据会消失得无影无踪,功,但数据会消失得无影无踪,没有任何反馈。所以经常把不没有任何反馈。所以经常把不想在屏幕显示的信息全部送想在屏幕显示的信息全部送到到 //devdev//nullnull 中,在中,在 shellshell 脚脚本中用得比较多。本中用得比较多。

  如:  如: ls ls –l –l > > /dev/null/dev/null 还可以用来清空文件的内容:还可以用来清空文件的内容:

cat cat /dev/null /dev/null >> FileName FileName

Page 10: Linux 下 Shell 编程简介

Linuxidc.comLinuxidc.com

LinuxLinux 公社(公社( LinuxIDC.comLinuxIDC.com )于)于 20062006年年 99 月月 2525 日注册并开通网站,日注册并开通网站, LinuxLinux 现在现在已经成为一种广受关注和支持的一种操作系已经成为一种广受关注和支持的一种操作系统,统, IDCIDC 是互联网数据中心,是互联网数据中心, LinuxIDCLinuxIDC 就就是关于是关于 LinuxLinux 的数据中心。的数据中心。

LinuxIDC.comLinuxIDC.com 提供包括提供包括UbuntuUbuntu,, FedoraFedora,, SUSESUSE 技术,以及最技术,以及最新新 ITIT 资讯等资讯等 LinuxLinux 专业类网站。专业类网站。

23/4/21 西安理工大学计算机科学与工程学院

Page 11: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇 用户管理用户管理 目录管理目录管理 文件管理文件管理 权限管理权限管理

Page 12: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————用户管理用户管理 新建用户新建用户 ((user adduser add)) useradduseradd UserName UserName 新建用户后,会在新建用户后,会在 /home/home 目录下建立一个以目录下建立一个以 UserNameUserName 命名命名

的文件夹,用户每次登录时自动定位到该文件夹下的文件夹,用户每次登录时自动定位到该文件夹下。。 为用户添加密码为用户添加密码 ((passwpassworordd)) passwdpasswd UserName UserName 删除用户删除用户 ((useruser deldeleteete)) userdeluserdel UserName UserName 使用使用–– pp 选项可以删除用户目录下的文件及与用户相关联的其他文选项可以删除用户目录下的文件及与用户相关联的其他文

件。件。 新建组群新建组群 ((group addgroup add) ) groupaddgroupadd GroupName GroupName 删除组群删除组群 ((groupgroup deldelete)ete) groupdelgroupdel GroupName GroupName

Page 13: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————用户管理用户管理 用户身份用户身份 whoamiwhoami 查看登录用户查看登录用户 whowho [[ 选项选项 ]]

-a -a 显示所有用户的所有信息显示所有用户的所有信息 -H-H 显示列标题显示列标题 查看用户的操作查看用户的操作 w w 某一时刻用户的行为某一时刻用户的行为 用户间切换用户间切换 ((ssubstitute ubstitute uuser)ser)

susu UserName UserName 如:如: susu 或或 su rootsu root 切换为根用户切换为根用户 su Haisonsu Haison 切换为名为切换为名为 HaisonHaison 的用户的用户

Page 14: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————目录管理目录管理 创建目录创建目录 ((mmake ake dirdirectoryectory))

mkdirmkdir DirecName DirecName 删除目录删除目录 ((rreemmove ove dirdirectoryectory))

rmdirrmdir DirecName DirecName 显示工作目录显示工作目录 ((pprint rint wworking orking ddirectoryirectory))

pwdpwd 显示目录内容显示目录内容 ((lliisstt)) lsls [ [ 选项选项 ] ] 选项选项 :-a :-a 显示当前目录下的所有文件,包括以显示当前目录下的所有文件,包括以 .. 开头的文件。开头的文件。 -l -l 以长列表的形式显示文件列表以长列表的形式显示文件列表 ,, 如:如: -rw-r--r-- 1 haison haison 18 Nov 2 10:10 haison.c-rw-r--r-- 1 haison haison 18 Nov 2 10:10 haison.c

Page 15: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————目录管理目录管理 改变当前目录改变当前目录 ((cchange hange ddirectoryirectory))

cdcd 或 或 cd cd ~~ 进入登录时的主目录进入登录时的主目录 cd cd // 进入根目录进入根目录 cd cd .. .. 进入上一级目录进入上一级目录 cd cd /home/home 进入系统的进入系统的 homehome 目录目录 cdcd home home 进入当前目录下的进入当前目录下的 homehome 目录目录 目录目录重命名重命名 ((mmoovvee))

mvmv SourceDirecName TargetDirecName SourceDirecName TargetDirecName 目录拷贝目录拷贝 ((ccooppyy))

cpcp SourceDirec TargetDirec SourceDirec TargetDirec

-r -r 拷贝目录下的文件、子目录及子目录下的文件拷贝目录下的文件、子目录及子目录下的文件

Page 16: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————文件管理文件管理 新建文件新建文件 >>FileNameFileName 或或 touchtouch FileName FileName 或或 vivi FileName FileName 删除文件删除文件 ((rreemmove fileove file))

rm rm [[ 选项选项 ] FileName] FileName

选项:选项: -i-i 系统提示是否真要删除该文件系统提示是否真要删除该文件 -f-f 删除文件之前不提示任何确认信息删除文件之前不提示任何确认信息 -r-r 递归删除目录下所有子目录的内容递归删除目录下所有子目录的内容 文件拷贝文件拷贝 ((ccooppyy))

cpcp SourceFile TargetFile SourceFile TargetFile 文件链接文件链接 ((lliinnk)k)

lnln –s SourceFile TargetFile –s SourceFile TargetFile

创建文件链接创建文件链接 ,, 用用 ls –lls –l 查看,查看,会看到会看到 TargetFile->SourceFileTargetFile->SourceFile

Page 17: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————文件管理文件管理 显示文件内容显示文件内容 moremore FileName FileName 一次一屏的显示文件内容一次一屏的显示文件内容 ,, 空格或回车显示下一屏空格或回车显示下一屏 lessless FileName FileName 一次一屏的显示文件内容一次一屏的显示文件内容 ,, 空格或回车显示下一屏空格或回车显示下一屏 cat cat FileName FileName 一次全部显示文件的内容一次全部显示文件的内容 cat file1 file2cat file1 file2>>file3 file3 将将 file1file1、、 file2file2 的内容写到的内容写到 file3file3,, 覆盖覆盖

file3file3原内容原内容 cat file1cat file1>>>>file2 file2 将将 file1file1 的内容追加到的内容追加到 file2,file2file2,file2原内容不变原内容不变 headhead FileName FileName 只显示文件的前只显示文件的前 1010 行行 head –n FileName head –n FileName 显示文件的前显示文件的前 nn 行行 tail tail FileName FileName 只显示文件的后只显示文件的后 1010 行行 tail –n FileName tail –n FileName 显示文件的后显示文件的后 nn 行行 nlnl FileName FileName 以编号的形式一次全部显示文件的内容以编号的形式一次全部显示文件的内容 ,, 忽略空格忽略空格

Page 18: Linux 下 Shell 编程简介

Linuxidc.comLinuxidc.com

LinuxLinux 公社(公社( LinuxIDC.comLinuxIDC.com )于)于 20062006年年 99 月月 2525 日注册并开通网站,日注册并开通网站, LinuxLinux 现在现在已经成为一种广受关注和支持的一种操作系已经成为一种广受关注和支持的一种操作系统,统, IDCIDC 是互联网数据中心,是互联网数据中心, LinuxIDCLinuxIDC 就就是关于是关于 LinuxLinux 的数据中心。的数据中心。

LinuxIDC.comLinuxIDC.com 提供包括提供包括UbuntuUbuntu,, FedoraFedora,, SUSESUSE 技术,以及最技术,以及最新新 ITIT 资讯等资讯等 LinuxLinux 专业类网站。专业类网站。

23/4/21 西安理工大学计算机科学与工程学院

Page 19: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————文件管理文件管理 文件移动文件移动 //重命名重命名 ((mmoovve)e) mvmv SourceFile TargetFile SourceFile TargetFile 将一个或多个文件将一个或多个文件移动移动到另外一个目录下,或者到另外一个目录下,或者

将一个文件将一个文件重命名重命名为另一个文件。为另一个文件。 文件查找文件查找 ((findfind) ) findfind [ [路径路径 ] [] [选项选项 ]] 如:如: find / -name “Linux” -print find / -name “Linux” -print 文件内容查找文件内容查找 ((grepgrep)) 如:如: grepgrep “main” haison.c “main” haison.c 文件类型文件类型 命令命令 ls –lls –l 以长列表形式显示文件的类型等以长列表形式显示文件的类型等 ,, 如如 :-rw-r--r--:-rw-r--r--

前缀前缀 类型类型 前缀前缀 类型类型—— 普通文件普通文件 ll 链接链接 ((llinkink)) 文件文件bb 块块 ((bblocklock)) 设备文件设备文件 pp 命名管道命名管道 ((ppipeipe)) 文件文件

cc字符字符 ((ccharacterharacter)) 设备文设备文件件 ss 本地套接口本地套接口 ((ssocketocket))

dd 目录目录 ((ddirectoryirectory))

Page 20: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————权限管理权限管理 文件访问权限文件访问权限 一个文件一经创建,就具有三种访问方式一个文件一经创建,就具有三种访问方式 字符字符 含义含义 八进制表示八进制表示

rr rread ead ::读,可以显示该文件的内容读,可以显示该文件的内容 2222=4=4

ww wwrite rite ::写,可以编辑或删除它写,可以编辑或删除它 2211=2=2

xx eexxcutecute ::执行,如果是程序的话执行,如果是程序的话 2200=1=1

-- rr ww xx rr ww -- rr -- xx

u g o类型

一个文件由 1 个类型和 9 个权限位来描述, 9 个权限位分为 3 组,每组 3个权限位,具体表示如下所示:

u:user, 文件的属主

g:group, 文件的属主所在的组,属组o:other, 其他的用户

a:all, 以上三种人

Page 21: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————权限管理权限管理 改变文件改变文件 //目录的权限目录的权限 ((chchange ange modmodee)) chmod chmod [u/g/o/a] [+/-/=][u/g/o/a] [+/-/=] [ [ 权限权限 ] ] FileName/DirecNameFileName/DirecName 其中:其中: ++ :增加指定的权限:增加指定的权限 -- :去掉指定的权限:去掉指定的权限 == :清除所选的权限并将其设置为制定的权限:清除所选的权限并将其设置为制定的权限 chmodchmod 允许使用八进制符号作为模式,改变权限。允许使用八进制符号作为模式,改变权限。 chmodchmod PermissionCode FileName/DirecName PermissionCode FileName/DirecName 其中,其中, PermissionCode PermissionCode 按如下方式计算按如下方式计算

-- rr ww xx rr ww -- rr -- xx

4+2+1=7 4+2=6

4+1=5所以该文件 /目录具有的权限为: 765

Page 22: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————权限管理权限管理

命令命令 结果结果 含义含义chmod a-x haison.cchmod a-x haison.c rw-rw-rw-rw-rw-rw- 收回所有用户的执行权限收回所有用户的执行权限

chmod go-w chmod go-w haison.chaison.c

rw-r- -r- -rw-r- -r- - 收回同组用户和其他用户的写权限收回同组用户和其他用户的写权限

chmod g+w chmod g+w haison.chaison.c

rw-rw-r- -rw-rw-r- - 赋予同组用户写权限赋予同组用户写权限

chmod a= haison.cchmod a= haison.c - - - - - - - - - - - - - - - - - -

清除文件的所有权限清除文件的所有权限

chmod 命令示例假定 haison.c 最初具有这样的权限 rwxrwxrwx ,连续操作如下

命令命令 结果结果 含义含义chmod 666 haison.cchmod 666 haison.c rw-rw-rw-rw-rw-rw- 赋予所有用户读和写的权限赋予所有用户读和写的权限

chmod 644 haison.cchmod 644 haison.c rw-r- - r- - rw-r- - r- - 赋予属主读、写权限,其他用户读权限赋予属主读、写权限,其他用户读权限

chmod 700 haison.cchmod 700 haison.c rwx- - - - - - rwx- - - - - - 赋予属主读、写和执行权限赋予属主读、写和执行权限

chmod 660 haison.cchmod 660 haison.c rw-rw- - - -rw-rw- - - - 赋予属主、属组读和写的权限赋予属主、属组读和写的权限

Page 23: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

命令篇命令篇————权限管理权限管理 -rw-r--r-- 1 haison haison 18 Nov 2 10:10 haison.c-rw-r--r-- 1 haison haison 18 Nov 2 10:10 haison.c 改变文件改变文件 //目录的属主目录的属主 ((chchange ange ownowner)er)

chownchown Owner FileName/DirecName Owner FileName/DirecName

如:如: chown Dave haison.cchown Dave haison.c 改变文件改变文件 //目录的属组目录的属组 ((chchange ange grgrououpp))

chgrpchgrp Group FileName/DirecName Group FileName/DirecName

如:如: chgrp Dave haison.cchgrp Dave haison.c 改变文件改变文件 //目录的属主和属组目录的属主和属组 chownchown owner:group FileName/DirecName owner:group FileName/DirecName

如:如: chown Dave:Dave haison.cchown Dave:Dave haison.c

Page 24: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

变量篇变量篇 变量可以定制用户本身的工作环境,使用变量可以保存有用信息,使变量可以定制用户本身的工作环境,使用变量可以保存有用信息,使

系统获知用户相关设置,也用于保存暂时信息。系统获知用户相关设置,也用于保存暂时信息。 变量一般都用大写字母表示 使用 echo 命令可以显示单个变量的取值,要在变量名前面加 $ 如: USER=“haison” echo $USER 如果设置变量时,不想再改变其值,可以将其设置为只读,只要在变

量名前加 readonly 使用 set 命令可以显示所有本地定义的 shell 变量 使用 unset 变量名可以清除对变量的定义

Page 25: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

变量篇变量篇本地变量:用户自定义的变量。

环境变量:用于所有用户变量,用于用户进程前,必须用 export 命令导出。

位置变量: $0( 脚本名 ), $1-$9: 脚本参数。

特定变量:脚本运行时的一些相关信息。

$#$# 传递到脚本的参数个数传递到脚本的参数个数$*$* 传递到脚本的参数,与位置变量不同,此选项参数可超过传递到脚本的参数,与位置变量不同,此选项参数可超过 99 个个$$$$ 脚本运行时当前进程的脚本运行时当前进程的 IDID号,常用作临时变量的后缀,如号,常用作临时变量的后缀,如 haison.$haison.$

$$

$!$! 后台运行的后台运行的 (&)(&) 最后一个进程的最后一个进程的 IDID号号$@$@ 与与 $#$# 相同,使用时加引号,并在引号中返回参数个数相同,使用时加引号,并在引号中返回参数个数$-$- 上一个命令的最后一个参数上一个命令的最后一个参数$?$? 最后命令的退出状态,最后命令的退出状态, 00 表示没有错误,其他任何值表明有错误表示没有错误,其他任何值表明有错误

Page 26: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

变量篇变量篇 示例:示例:#!/bin/sh#!/bin/sh#VarTest.sh#VarTest.sh#To test the variables#To test the variablesUSER=haisonUSER=haisonecho "Hello,$USER,the output of this script are as echo "Hello,$USER,the output of this script are as

follows:"follows:"echo "The script name echo "The script name

is :`basename $0`"is :`basename $0`"echo "The first param of the script is :$1"echo "The first param of the script is :$1"echo "The second param of the script is :$2"echo "The second param of the script is :$2"echo "The tenth param of the script is :$10"echo "The tenth param of the script is :$10"echo "All the params you input are :$*"echo "All the params you input are :$*"echo "The number of the params you input are:$#"echo "The number of the params you input are:$#"echo "The process ID for this script is :$$"echo "The process ID for this script is :$$"echo "The exit status of this script is :$?"echo "The exit status of this script is :$?"

Page 27: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

条件测试篇条件测试篇 文件状态测试文件状态测试

-d-d 目录目录 -r-r 可读可读-f-f 常规文件常规文件 -w-w 可写可写-L-L 符号连接符号连接 -x-x 可执行可执行-s-s 文件长度大于文件长度大于 00 ,非空,非空 -u-u 文件有文件有 suidsuid位设置位设置

示例: 示例: [ -s haison.c ] 0[ -s haison.c ] 0 表示成功,其他为失败,下同。表示成功,其他为失败,下同。

逻辑操作符逻辑操作符 -a-a 逻辑与逻辑与 (and),(and), 操作符两边均为真,结果为真,否则为假。操作符两边均为真,结果为真,否则为假。 -o-o 逻辑或逻辑或 (or),(or), 操作符两边一边为真,结果为真,否则为假。操作符两边一边为真,结果为真,否则为假。 ! ! 逻辑否逻辑否 ,, 条件为假,结果为真,反之。条件为假,结果为真,反之。

示例: 示例: [ -r haison.c –a –w hai.c ][ -r haison.c –a –w hai.c ]

Page 28: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

条件测试篇条件测试篇 字符串测试字符串测试

== 两个字符串相等两个字符串相等 -z-z 空串空串!! == 两个字符串不相等两个字符串不相等 -n-n 非空串非空串

示例:示例: [ -z $SHELL ][ -z $SHELL ]

数值测试数值测试

-eq-eq 数值相等数值相等 ((eqequal to)ual to) -lt-lt 第一个数小于第二个数第一个数小于第二个数 ((lless ess tthan)han)

-ne-ne 数值不相等数值不相等 ((nnot ot eequal to)qual to) -le-le 第一个数小于等于第二个数第一个数小于等于第二个数-gt-gt 第一个数大于第二个数第一个数大于第二个数 ((ggreater reater

tthan)han)-ge-ge 第一个数大于等于第二个数第一个数大于等于第二个数

示例:示例: [ “10” -eq “12” ][ “10” -eq “12” ]

Page 29: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

控制结构篇控制结构篇

选择结构

循环结构

if 语句 : if then else 提供条件测试

case 语句:允许匹配模式、单词或值

for :每次依次处理列表内的信息,直至循环耗尽。

until: 不常用。条件在循环末尾,至少执行一次。

while: 条件在循环头部。

Page 30: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

控制结构篇控制结构篇———— ifif语句语句 格式格式 11

ifif [ [ 条条件件 ]]

thenthen

命令命令 fifi

格式格式 22

ifif [ [ 条件条件 ] ] ;; thenthen 命令命令

fi fi

格式格式 33

ifif [ [ 条件条件 ]]

thenthen

命令命令 11

elseelse

命令命令 22

fifi

格式格式 44

ifif [ [ 条件条件 11 ] ]

thenthen

命令命令 11

elifelif [ [ 条件条件 2 ]2 ]

thenthen

命令命令 22

elseelse

命令命令 33

fifi

示例示例#!/bin/sh#!/bin/sh

#ifTest#ifTest

#to show the method of if #to show the method of if

echo -e "Enter the first integer:\c"echo -e "Enter the first integer:\c"

read FIRSTread FIRST

echo -n "Enter the second integer:"echo -n "Enter the second integer:"

read SECONDread SECOND

if [ "$FIRST" -gt "$SECOND" ]if [ "$FIRST" -gt "$SECOND" ]

then then

echo "$FIRST is greater than echo "$FIRST is greater than $SECOND"$SECOND"

elif [ "$FIRST" -gt "$SECOND" ]elif [ "$FIRST" -gt "$SECOND" ]

then then

echo "$FIRST is less than $SECOND" echo "$FIRST is less than $SECOND"

elseelse

echo "$FIRST is equal to $SECOND" echo "$FIRST is equal to $SECOND"

fifi

Page 31: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

控制结构篇控制结构篇———— casecase语句语句 格式格式 case case 值 值 inin

模式模式 1)1)

命令命令 11

;;;;

…… ……

**))

命令命令 nn

;;;;

esacesac

取值后面必须为单词取值后面必须为单词 inin,,每一个模式必须以每一个模式必须以右括右括号号

结束。取值可以为变量或常数。取值检测匹配的结束。取值可以为变量或常数。取值检测匹配的每一个模式,一旦模式匹配,其间所有命令开始每一个模式,一旦模式匹配,其间所有命令开始执行直至执行直至 ;;;; 。执行完匹配模式相应命令后不再继。执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用续其他模式。如果无一匹配模式,使用 **号捕获号捕获该值,再接受其他输入。该值,再接受其他输入。

示例示例#!/bin/sh#caseTest#to test the method of caseUSER=`whoami`

case $USER in root)echo “You can do all the operations” ;; Dave)echo "You can do some operations” ;; *)echo "Sorry,you can not do anything" ;;esac

Page 32: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

控制结构篇控制结构篇———— forfor循环循环 格式格式for for 变量名 变量名 inin 列表列表dodo

命令命令donedone

当变量值在列表里当变量值在列表里,, forfor循环即执行循环即执行一次所有命令,使用变量名访问列一次所有命令,使用变量名访问列表中取值。表中取值。嵌套循环可以将一个嵌套循环可以将一个 forfor循环嵌循环嵌

在在另一个另一个 forfor循环里循环里

示例示例#!/bin/sh#!/bin/sh

#forTest#forTest

#to test the method of for#to test the method of for

COUNTER=0COUNTER=0

for FILES in *for FILES in *

do do

COUNTER=`expr $COUNTER + 1`COUNTER=`expr $COUNTER + 1`

done done

echo "There are $COUNTER files in echo "There are $COUNTER files in `pwd` "`pwd` "

Page 33: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

控制结构篇控制结构篇———— untiluntil 循环循环 格式格式 until until 条件条件 dodo

命令命令 donedone

until until 执行一系列命令,直至条件为真执行一系列命令,直至条件为真时停止时停止

示例示例#!/bin/sh#untilTest#to test the mothod of untilIS_ROOT=`who|grep root`until [ "IS_ROOT" ]do IS_ROOT=`who|grep root` sleep 5doneecho "Watch it.root in!"

Page 34: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

控制结构篇控制结构篇———— whilewhile 循环循环 格式格式while while 命令命令dodo

命令命令donedone

WhileWhile 循环用于不断执行一系列命令,循环用于不断执行一系列命令,也用于从输入文件中读取数据。虽然也用于从输入文件中读取数据。虽然通常只有一个通常只有一个命令命令,但在,但在 whilewhile和和

dodo 之之间可以放几个间可以放几个命令命令。。命令命令通常用作测通常用作测试条件,只有当试条件,只有当命令命令的退出状态为的退出状态为 00

时,时, dodo和和 donedone 之间之间命令命令才被执行,才被执行,如如

果退出状态不是果退出状态不是 00 ,则循环终止。,则循环终止。

示例示例#!/bin/sh#whileTest#to test the method of while

COUNTER=0while [ $COUNTER -lt 10 ]do echo $COUNTER COUNTER=`expr $COUNTER + 1`done

while read LINEdo echo $LINEdone < names.txt

Page 35: Linux 下 Shell 编程简介

23/4/21 西安理工大学计算机科学与工程学院

函数篇函数篇 格式格式函数名 函数名 ()()

{{

命令命令}}

所有函数在使用前必须定义,这意味着必所有函数在使用前必须定义,这意味着必须将函数放在脚本开始部分,直至须将函数放在脚本开始部分,直至 shellshell 解释解释器首次发现它,才可以使用。器首次发现它,才可以使用。 调用函数仅使用其函数名即可,要传给函调用函数仅使用其函数名即可,要传给函数的变量跟在函数后面。数的变量跟在函数后面。 函数里面定义的变量以下划线函数里面定义的变量以下划线 (_)(_) 开始。开始。 函数可以放在同一个文件中作为一段代函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中,文码,也可以放在只包含函数的单独文件中,文件也必须以件也必须以 #!/bin/sh#!/bin/sh 开头。开头。

示例示例 11#!/bin/sh#funTest#to test the functionDATE=`date`Hello(){ echo “Hello,today is $DATE”}Hello示例示例 22#!/bin/sh#funTest#to test the function

. ./HelloHello

Page 36: Linux 下 Shell 编程简介

Linuxidc.comLinuxidc.com

LinuxLinux 公社(公社( LinuxIDC.comLinuxIDC.com )于)于 20062006年年 99 月月 2525 日注册并开通网站,日注册并开通网站, LinuxLinux 现在现在已经成为一种广受关注和支持的一种操作系已经成为一种广受关注和支持的一种操作系统,统, IDCIDC 是互联网数据中心,是互联网数据中心, LinuxIDCLinuxIDC 就就是关于是关于 LinuxLinux 的数据中心。的数据中心。

LinuxIDC.comLinuxIDC.com 提供包括提供包括UbuntuUbuntu,, FedoraFedora,, SUSESUSE 技术,以及最技术,以及最新新 ITIT 资讯等资讯等 LinuxLinux 专业类网站。专业类网站。

23/4/21 西安理工大学计算机科学与工程学院