shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf ·...

42
shell shell 脚本编程 脚本编程 aqiu aqiu

Transcript of shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf ·...

Page 1: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

shellshell 脚本编程 脚本编程

aqiuaqiu

Page 2: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

LinuxLinux 基本命令基本命令

cpcp 命令 命令

该命令的功能是将给出的文件或目录拷贝该命令的功能是将给出的文件或目录拷贝

到另一文件或目录中,功能十分强大。 到另一文件或目录中,功能十分强大。

语法: 语法: cp [cp [ 选项选项 ] ] 源文件或目录 目标文件源文件或目录 目标文件

或目录 或目录

Page 3: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

mvmv 命令命令

用户可以使用用户可以使用 mvmv 命令来为文件或目录改名命令来为文件或目录改名

或将文件由一个目录移入另一个目录中。或将文件由一个目录移入另一个目录中。

语法:语法: mv [mv [ 选项选项 ] ] 源文件或目录 目标文件源文件或目录 目标文件

或目录 或目录

Page 4: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

rmrm 命令命令

用户可以用用户可以用 rmrm 命令删除不需要的文件或者命令删除不需要的文件或者

目录。 目录。

语法:语法: rm [rm [ 选项选项 ] ] 文件 文件

如果没有使用如果没有使用 - r- r 选项,则选项,则 rmrm 不会删除目录。不会删除目录。

Page 5: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

mkdirmkdir 和和 rmdirrmdir

语法:语法: mkdir [mkdir [ 选项选项 ] dir-name ] dir-name 语法:语法: rmdir [rmdir [ 选项选项 ] dir-name ] dir-name

Page 6: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

cd cd 命令 命令

功能:改变工作目录。功能:改变工作目录。

语法:语法: cd [directory]cd [directory]

Page 7: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

ls ls 命令命令

lsls 是英文单词是英文单词 listlist 的简写,其功能为列出目的简写,其功能为列出目

录的内容。该命令类似于录的内容。该命令类似于 DOSDOS 下的下的 dirdir 命命令。令。

语法:语法: ls [ls [ 选项选项 ] [] [ 目录或是文件目录或是文件 ] ]

Page 8: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

susu 命令命令

这个命令非常重要。它可以让一个普通用这个命令非常重要。它可以让一个普通用户拥有超级用户或其他用户的权限,也可户拥有超级用户或其他用户的权限,也可以让超级用户以普通用户的身份做一些事以让超级用户以普通用户的身份做一些事情。普通用户使用这个命令时必须有超级情。普通用户使用这个命令时必须有超级用户或其他用户的口令。用户或其他用户的口令。

该命令的一般形式为: 该命令的一般形式为: su [su [ 选项选项 ] [] [ 使用者使用者

帐号帐号 ]]

Page 9: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

psps 命令命令

显示系统中执行的程序。显示系统中执行的程序。

语法:语法: ps [ps [ 选项选项 ]]

Page 10: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

killkill 命令命令

删除执行中的程序删除执行中的程序

语法:语法: kill [kill [ 选项选项 ] PID] PID

Page 11: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

grepgrep 命令命令

搜寻输出的特定文字搜寻输出的特定文字

语法:语法: grep grep 字符串字符串

例:例:

ps aux | grep matlabps aux | grep matlab

kill PIDkill PID

Page 12: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

echoecho 命令 命令

echoecho 命令的功能是在显示器上显示一段文命令的功能是在显示器上显示一段文

字,一般起到一个提示的作用。字,一般起到一个提示的作用。

该命令的一般格式为: 该命令的一般格式为: echo [ -n ] echo [ -n ] 字符串字符串

Page 13: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

clearclear 命令命令

clearclear 命令的功能是清除屏幕上的信息,它命令的功能是清除屏幕上的信息,它

类似于类似于 DOSDOS 中的 中的 clscls 命令。清屏后,提示命令。清屏后,提示

符移动到屏幕左上角。符移动到屏幕左上角。

Page 14: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

ShellShell 的基本知识(的基本知识( 11 ))

shellshell 提示符及其环境 提示符及其环境

提示符:提示符: $ $

环境:环境: LinuxLinux ,, UnixUnix ,, DosDos 等等等等

ShellShell 其实就是一个解释执行命令的程序,其实就是一个解释执行命令的程序,

所谓所谓 shellshell 编程其实就是用一定的语法将各编程其实就是用一定的语法将各

种基本的命令组合起来,让种基本的命令组合起来,让 shellshell 程序去解程序去解

释执行。释执行。

Page 15: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

ShellShell 的基本知识(的基本知识( 22 ))

同传统的编程语言一样,同传统的编程语言一样, shellshell 提供了很多提供了很多

特性,这些特性可以使你的特性,这些特性可以使你的 shell script shell script 编程更为有用,如:数据变量、参数传递编程更为有用,如:数据变量、参数传递

、判断、流程控制、数据输入和输出,子、判断、流程控制、数据输入和输出,子

程序及以中断处理等。 程序及以中断处理等。

Page 16: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

如何执行如何执行 shellshell 程序程序

ShellShell 程序(程序( ***.sh***.sh ))

执行这个命令时执行这个命令时(1) #./***.sh (1) #./***.sh

(2) #chmod u+x ***.sh (2) #chmod u+x ***.sh

#***.sh#***.sh

(3) #sh ***.sh(3) #sh ***.sh

Page 17: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

常量常量

字符串,例如“字符串,例如“ Hello WorldHello World !”。!”。

数字,例如数字,例如 705705 ,, 2323 。。

(好像就这么多,我的理解)(好像就这么多,我的理解)

Page 18: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

变量变量

shellshell 编程中它们是没有类型的,简称弱类编程中它们是没有类型的,简称弱类

型编程语言,在这个变量中可以保含一个型编程语言,在这个变量中可以保含一个

数字,一个字符串,一个单词等。你并不数字,一个字符串,一个单词等。你并不

需要声明这个变量,它会在需要声明这个变量,它会在引用引用这个变量这个变量

时创建它。 时创建它。

STR="Hello World!" STR="Hello World!" echo $STR echo $STR

Page 19: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

局部变量局部变量

局部变量一般是指写在函数中的变量,他局部变量一般是指写在函数中的变量,他

的生命力是有限的。局部变量比较好理解的生命力是有限的。局部变量比较好理解

,这里就不再多介绍了。,这里就不再多介绍了。

Page 20: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

从键盘输入变量值从键盘输入变量值

使用使用 readread 命令命令

read var1 var2 … varnread var1 var2 … varn

Page 21: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

注释注释

ShellShell 编程中的注释以编程中的注释以 ## 开头 开头

Page 22: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

数字运算 数字运算

主要是指整数运算。主要是指整数运算。 exprexpr 命令可以将字符命令可以将字符

型变量转换为整数进行操作型变量转换为整数进行操作

expr integer operator integer expr integer operator integer

其中其中 operatoroperator 为为 + - * / %, + - * / %, 但对但对 ** 的使用要的使用要

用转义符用转义符 \,\, 如: 如: $expr 4 \* 5 $expr 4 \* 5 20 20 $int=`expr 5 + 7` $int=`expr 5 + 7` $echo $int $echo $int 1212

Page 23: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

逻辑运算逻辑运算

testtest 进行逻辑运算,用进行逻辑运算,用 [ ][ ] 括起来就是括起来就是 testtest 运运算算

int1 -eq int2 int1 -eq int2 相等相等 ? ? int1 -ne int2 int1 -ne int2 不等不等 ? ? int1 -gt int2 int1 > int2 ? int1 -gt int2 int1 > int2 ? int1 -ge int2 int1 >= int2 ? int1 -ge int2 int1 >= int2 ? int1 -lt int2 int1 < int2 ? int1 -lt int2 int1 < int2 ? int1 -le int2 int1 <= int2 int1 -le int2 int1 <= int2

Page 24: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

双引号及单引号 双引号及单引号

$echo "$HOME $PATH" $echo "$HOME $PATH" /home/hbwork opt/kde/bin:/usr/local/bin:/home/hbwork opt/kde/bin:/usr/local/bin:

$echo '$HOME $PATH' $echo '$HOME $PATH' $HOME $PATH $HOME $PATH

Page 25: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

空格空格

由于由于 shellshell 对命令中的多余的空格不作任何对命令中的多余的空格不作任何

处理 ,而用引号括起来则可以防止处理 ,而用引号括起来则可以防止 shellshell 去去掉这些空格。掉这些空格。

$ str1=abcd $ str1=abcd

$ str2="abcd " $ str2="abcd "

Page 26: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

分支结构分支结构

Page 27: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

ifif 嵌套及嵌套及 elifelif 结构(结构( 11 ))

if [ variable = value ] if [ variable = value ] then then command command else else if [ variable = value ] if [ variable = value ] then then command command else else command command fi fi

Page 28: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

ifif 嵌套及嵌套及 elifelif 结构(结构( 22 ))

if [ variable = value ] if [ variable = value ] then then command command elif [ variable = value ] elif [ variable = value ] then then command command fi fi

Page 29: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

CaseCase 语句语句

case value in case value in pattern1) pattern1) command;; command;; pattern2) pattern2) command;; command;; ... ... patternn) patternn) command; command; esac esac

Page 30: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

And And 和 和 OrOr

command1 && command2 command1 && command2 command1 || command2 command1 || command2

Page 31: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

循环语句循环语句

Page 32: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

ForFor循环循环

for var in arg1 arg2 ... argn for var in arg1 arg2 ... argn do do command command .... .... command command done done

Page 33: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

ForFor循环示例循环示例

int=1int=1

for $int in 1 2 3 4 5for $int in 1 2 3 4 5

dodo

sq=`expr $int \* $int` sq=`expr $int \* $int` echo $sq echo $sq int=`expr $int + 1` int=`expr $int + 1` donedone

Page 34: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

whilewhile循环 循环

while command while command do do command command command command command command ... ... done done

Page 35: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

WhileWhile循环的示例循环的示例

int=1 int=1 while [ $int -le 5 ] while [ $int -le 5 ] do do sq=`expr $int \* $int` sq=`expr $int \* $int` echo $sq echo $sq int=`expr $int + 1` int=`expr $int + 1` done done

Page 36: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

untiluntil循环结构 循环结构

until command until command do do command command command command .... .... command command done done

Page 37: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

UntilUntil循环示例循环示例

int=1 int=1

until [ $int -gt 5 ] until [ $int -gt 5 ] do do sq=`expr $int \* $int` sq=`expr $int \* $int` echo $sq echo $sq int=`expr $int + 1` int=`expr $int + 1` done done

Page 38: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

从循环中退出: 从循环中退出: breakbreak 和和

continuecontinue 命令 命令

break break 立即退出循环 立即退出循环

continue continue 忽略本循环中的其他命令,继续下忽略本循环中的其他命令,继续下

一下循环 一下循环

Page 39: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

函数 (子过程)函数 (子过程)

funcname() funcname() { { command command ... ... command; #command; # 分号 分号

} }

Page 40: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

函数示例函数示例

setup () setup () { command list ; } { command list ; }

do_data () do_data () { command list ; } { command list ; }

setup setup do_data do_data

Page 41: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

shellshell 程序的调试 程序的调试

使用使用 -x-x 进行跟踪执行,执行并显示每一条进行跟踪执行,执行并显示每一条

指令。 指令。

Page 42: shell 脚本编程 - read.pudn.comread.pudn.com/downloads172/ebook/798182/shell-programming.pdf · Shell的基本知识(2) 同传统的编程语言一样,shell提供了很多

谢谢!谢谢!