1 / 36

Linux 下 Shell 编程简介

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

akando
Download Presentation

Linux 下 Shell 编程简介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux下Shell编程简介 刘桂海 ( 西安理工大学 计算机科学与工程学院,陕西 西安 710048)

  2. Linuxidc.com 西安理工大学计算机科学与工程学院 Linux公社(LinuxIDC.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。 LinuxIDC.com提供包括Ubuntu,Fedora,SUSE技术,以及最新IT资讯等Linux专业类网站。

  3. 内容安排 • 综述篇 • 命令篇 • 变量篇 • 条件测试篇 • 控制结构篇 • 函数篇 西安理工大学计算机科学与工程学院

  4. 综述篇 • Shell是什么 • 怎样写Shell • Cygwin简介 • Linux黑洞 西安理工大学计算机科学与工程学院

  5. 综述篇——Shell是什么 • 壳(Shell)保护其内部的核(Kernel) 西安理工大学计算机科学与工程学院

  6. 综述篇——Shell是什么 • Shell是一种具备特殊功能的程序, 它是介于使用者和 UNIX/Linux 操作系统之核心程序(kernel)间的一个接口。 • 为了对用户屏蔽内核的复杂性,也为了保护内核以免用户误操作造成损害,在内核的周围建了一个外壳(shell)。用户向shell提出请求,shell解释并将请求传给内核。 • 使用较广的shell有标准的Bourne shell (sh)、Korn Shell(ksh)、C shell (csh)、Bourne Again Shell(bash)等。 • 查看当前环境所用shell:echo $SHELL • shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。 • 本质上,shell 脚本是命令行命令简单的组合到一个文件里面。Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命令,然后调用相应的应用程序。 西安理工大学计算机科学与工程学院

  7. 综述篇——怎样写Shell 简单脚本示例: vi ShowHello.sh 以下为脚本内容: #!/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 • 利用vi编辑器编辑脚本,将脚本命名为脚本功能.sh • Shell脚本不是复杂的程序,它是按行解释的,脚本第一行总是以 #!/bin/sh开头,它通知系统以下的Shell程序使用系统上的Bourne Shell来解释。 • 第二行注释中写入脚本名,第三行注释开始写入脚本功能——习惯。 • 以下行进入脚本正式编写 • 编写完后给脚本添加执行权限: chmod u+x ScripName • 运行脚本:ScripName 或 ./ScripName 西安理工大学计算机科学与工程学院

  8. 综述篇——cygwin简介 • cygwin——在windows下开发linux程序! cygwin是一个在windows平台上运行的linux模拟环境,是cygnus solutions公司开发的自由软件。它把gcc、gdb、gas等开发工具进行了改进,使它们能够生成并解释win32的目标文件,开发者基于win32api写了一个unix系统库的模拟层 ,只要把这些工具的源代码和这个共享库(cygwin dll )连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集 。 软件下载:cygwin的官方网站:www.cygwin.com 推荐下载:http://www.macraigor.com/full_gnu.htm  软件安装:在安装的过程中可选择默认安装路径:c:\cygwin 安装完后要修改cygwin目录下的cygwin.bat文件,在@echo off 后面加上set CYGWIN=title ntea,这是因为Cygwin的启动批处理 文件需要启动Unix文件系统模拟。 西安理工大学计算机科学与工程学院

  9. 综述篇——Linux黑洞 • /dev/null 是一个虚设的设备,俗称“Linux黑洞”,任何对/dev/null的写入都会成功,但数据会消失得无影无踪,没有任何反馈。所以经常把不想在屏幕显示的信息全部送到/dev/null中,在shell脚本中用得比较多。   如:ls –l > /dev/null • 还可以用来清空文件的内容:cat /dev/null > FileName 西安理工大学计算机科学与工程学院

  10. Linuxidc.com 西安理工大学计算机科学与工程学院 Linux公社(LinuxIDC.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。 LinuxIDC.com提供包括Ubuntu,Fedora,SUSE技术,以及最新IT资讯等Linux专业类网站。

  11. 命令篇 • 用户管理 • 目录管理 • 文件管理 • 权限管理 西安理工大学计算机科学与工程学院

  12. 命令篇——用户管理 • 新建用户(user add) useradd UserName 新建用户后,会在/home目录下建立一个以UserName命名的文件夹,用户每次登录时自动定位到该文件夹下。 • 为用户添加密码(password) passwd UserName • 删除用户(userdelete) userdel UserName 使用–p选项可以删除用户目录下的文件及与用户相关联的其他文件。 • 新建组群(group add) groupadd GroupName • 删除组群(groupdelete) groupdel GroupName 西安理工大学计算机科学与工程学院

  13. 命令篇——用户管理 • 用户身份 whoami • 查看登录用户 who[选项] -a 显示所有用户的所有信息 -H显示列标题 • 查看用户的操作 w 某一时刻用户的行为 • 用户间切换(substitute user) su UserName 如:su或su root切换为根用户 su Haison切换为名为Haison的用户 西安理工大学计算机科学与工程学院

  14. 命令篇——目录管理 • 创建目录(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 haison.c 西安理工大学计算机科学与工程学院

  15. 命令篇——目录管理 • 改变当前目录(change directory) cd或 cd ~进入登录时的主目录 cd /进入根目录 cd ..进入上一级目录 cd /home进入系统的home目录 cd home进入当前目录下的home目录 • 目录重命名(move) mv SourceDirecName TargetDirecName • 目录拷贝(copy) cp SourceDirec TargetDirec -r 拷贝目录下的文件、子目录及子目录下的文件 西安理工大学计算机科学与工程学院

  16. 命令篇——文件管理 • 新建文件 >FileName或touch FileName或vi FileName • 删除文件(remove file) rm [选项] FileName 选项:-i系统提示是否真要删除该文件 -f删除文件之前不提示任何确认信息 -r递归删除目录下所有子目录的内容 • 文件拷贝(copy) cp SourceFile TargetFile • 文件链接(link) ln –s SourceFile TargetFile 创建文件链接,用ls –l查看,会看到TargetFile->SourceFile 西安理工大学计算机科学与工程学院

  17. 命令篇——文件管理 • 显示文件内容 moreFileName 一次一屏的显示文件内容,空格或回车显示下一屏 less FileName 一次一屏的显示文件内容,空格或回车显示下一屏 cat FileName 一次全部显示文件的内容 cat file1 file2>file3 将file1、file2的内容写到file3,覆盖file3原内容 cat file1>>file2 将file1的内容追加到file2,file2原内容不变 head FileName 只显示文件的前10行 head –n FileName 显示文件的前n行 tail FileName 只显示文件的后10行 tail –n FileName 显示文件的后n行 nl FileName 以编号的形式一次全部显示文件的内容,忽略空格 西安理工大学计算机科学与工程学院

  18. Linuxidc.com 西安理工大学计算机科学与工程学院 Linux公社(LinuxIDC.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。 LinuxIDC.com提供包括Ubuntu,Fedora,SUSE技术,以及最新IT资讯等Linux专业类网站。

  19. 命令篇——文件管理 • 文件移动/重命名(move) mv SourceFile TargetFile将一个或多个文件移动到另外一个目录下,或者将一个文件重命名为另一个文件。 • 文件查找(find) find [路径] [选项] 如:find / -name “Linux” -print • 文件内容查找(grep) 如:grep “main” haison.c • 文件类型 命令ls –l以长列表形式显示文件的类型等,如:-rw-r--r-- 西安理工大学计算机科学与工程学院

  20. u:user,文件的属主 g:group,文件的属主所在的组,属组 o:other,其他的用户 类型 u g o a:all,以上三种人 命令篇——权限管理 • 文件访问权限 一个文件一经创建,就具有三种访问方式 一个文件由1个类型和9个权限位来描述,9个权限位分为3组,每组3个权限位,具体表示如下所示: 西安理工大学计算机科学与工程学院

  21. 命令篇——权限管理 • 改变文件/目录的权限(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 西安理工大学计算机科学与工程学院

  22. 命令篇——权限管理 chmod命令示例 假定haison.c最初具有这样的权限rwxrwxrwx,连续操作如下 西安理工大学计算机科学与工程学院

  23. 命令篇——权限管理 -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 西安理工大学计算机科学与工程学院

  24. 变量篇 • 变量可以定制用户本身的工作环境,使用变量可以保存有用信息,使系统获知用户相关设置,也用于保存暂时信息。 • 变量一般都用大写字母表示 • 使用echo命令可以显示单个变量的取值,要在变量名前面加$ 如:USER=“haison” echo $USER • 如果设置变量时,不想再改变其值,可以将其设置为只读,只要在变量名前加readonly • 使用set命令可以显示所有本地定义的shell变量 • 使用unset 变量名可以清除对变量的定义 西安理工大学计算机科学与工程学院

  25. 本地变量:用户自定义的变量。 环境变量:用于所有用户变量,用于用户进程前,必须用export命令导出。 位置变量:$0(脚本名),$1-$9:脚本参数。 特定变量:脚本运行时的一些相关信息。 变量篇 西安理工大学计算机科学与工程学院

  26. 变量篇 • 示例: #!/bin/sh #VarTest.sh #To test the variables USER=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 params you input are:$#" echo "The process ID for this script is :$$" echo "The exit status of this script is :$?" 西安理工大学计算机科学与工程学院

  27. 条件测试篇 • 文件状态测试 • 示例: [ -s haison.c ] 0表示成功,其他为失败,下同。 • 逻辑操作符 -a逻辑与(and),操作符两边均为真,结果为真,否则为假。 -o逻辑或(or),操作符两边一边为真,结果为真,否则为假。 ! 逻辑否,条件为假,结果为真,反之。 • 示例: [ -r haison.c –a –w hai.c ] 西安理工大学计算机科学与工程学院

  28. 条件测试篇 • 字符串测试 • 示例:[ -z $SHELL ] • 数值测试 • 示例:[ “10” -eq “12” ] 西安理工大学计算机科学与工程学院

  29. if语句: if then else提供条件测试 case 语句:允许匹配模式、单词或值 选择结构 for:每次依次处理列表内的信息,直至循环耗尽。 until:不常用。条件在循环末尾,至少执行一次。 while:条件在循环头部。 循环结构 控制结构篇 西安理工大学计算机科学与工程学院

  30. 控制结构篇——if语句 • 示例 #!/bin/sh #ifTest #to show the method 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 • 格式2 if [ 条件] ;then命令 fi • 格式1 if [ 条件] then 命令 fi 或 • 格式4 if [ 条件1 ] then 命令1 elif[ 条件2 ] then 命令2 else 命令3 fi • 格式3 if [ 条件] then 命令1 else 命令2 fi 西安理工大学计算机科学与工程学院

  31. 控制结构篇——case语句 • 格式 case 值 in 模式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 operations” • ;; • *)echo "Sorry,you can not do anything" • ;; • esac 西安理工大学计算机科学与工程学院

  32. 控制结构篇——for循环 • 格式 for 变量名 in列表 do 命令 done 当变量值在列表里,for循环即执行 一次所有命令,使用变量名访问列 表中取值。 嵌套循环可以将一个for循环嵌在 另一个for循环里 • 示例 #!/bin/sh #forTest #to test the method of for COUNTER=0 for FILES in * do COUNTER=`expr $COUNTER + 1` done echo "There are $COUNTER files in `pwd` " 西安理工大学计算机科学与工程学院

  33. 控制结构篇——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!" 西安理工大学计算机科学与工程学院

  34. 控制结构篇——while循环 • 格式 while 命令 do 命令 done While循环用于不断执行一系列命令, 也用于从输入文件中读取数据。虽然 通常只有一个命令,但在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.txt 西安理工大学计算机科学与工程学院

  35. 函数篇 • 示例1 • #!/bin/sh • #funTest • #to test the function • DATE=`date` • Hello() • { • echo “Hello,today is $DATE” • } • Hello • 格式 函数名 () { 命令 } 所有函数在使用前必须定义,这意味着必 须将函数放在脚本开始部分,直至shell解释 器首次发现它,才可以使用。 调用函数仅使用其函数名即可,要传给函 数的变量跟在函数后面。 函数里面定义的变量以下划线(_)开始。 函数可以放在同一个文件中作为一段代 码,也可以放在只包含函数的单独文件中,文 件也必须以#!/bin/sh开头。 • 示例2 • #!/bin/sh • #funTest • #to test the function • . ./Hello • Hello 西安理工大学计算机科学与工程学院

  36. Linuxidc.com 西安理工大学计算机科学与工程学院 Linux公社(LinuxIDC.com)于2006年9月25日注册并开通网站,Linux现在已经成为一种广受关注和支持的一种操作系统,IDC是互联网数据中心,LinuxIDC就是关于Linux的数据中心。 LinuxIDC.com提供包括Ubuntu,Fedora,SUSE技术,以及最新IT资讯等Linux专业类网站。

More Related