shell脚本介绍课件_第1页
shell脚本介绍课件_第2页
shell脚本介绍课件_第3页
shell脚本介绍课件_第4页
shell脚本介绍课件_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

课程内容

•什么是shell

•基本思路

・变量、条件、判断和程序控制

・函数

•调试

・正则表达式

SHELLAH

什么是shell

•用户与linux

•功能强大

•bash

Shell程序的特点

•可快速、简单地完成编程

•适合于编写一些执行相对简单任务的小工

・易于配置、维护和可移植

•执行效率较低

各种shell

Shell名相关信息

sh(Bourn源于Unix早期版本的最初shell

csh,tcsh,csh及其变体

zsh

ksh,pdks许多商业版本Unix的默认shel

h

bash来自GNU项目,是linux的主要shell,它的优点是

可以免费获取其源代码,可移植性很好

管道和重定向

・重定向输出

-Is-I>out.txt

-Is-I»out.txt

•以下命令可以让标准输出和错误输出分别

重定向

一pkillsleep>pkillout.txt2>pkillerr.txt

-pkillsleep>pkillout.txt2>&1

一pkillsleep>/dev/null2>&1

•输入重定向

•管道

将shell做为程序设计语言

•交互式程序

$forfilein*

>do

>ifgrep-Istd$file

>then

>more$file

>fi

>done

•脚本程序

通配符可以帮助我们

・*号可以代表任何字符串,而?号可以代表任

一一个字符

・[set]可以表示一个集合,Fset]可以取反

•{}可以代表一种让你将任何的字符串组放入

集合中

一Isa.{out,txt}-I

・''有特殊功能

-more'grep-Istd*'

-也可以这样

•more$(grep-Istd*)

创建脚本

•什么是脚本

,一个脚本的示例

#!/bin/sh

#firstshellprogram

forfilein*

do

ifgrep-Istd$file

then

more$file

fi

脚本及执行

•#!紧跟的是执行后面文本的程序

•#开始的是注释

•脚本程序本质上被看成shell的标准输入

•exit命令的作用是保证脚本程序返回一个有

意义的退出码

•脚本的扩展名或后缀是任意的,一般习惯

上使用.sh

•让脚本执行

-/bin/shfirst.sh

r=tfr-hn441李二十F7R曰占七立

SHELL基础语法

变量

­变量并不需要之前事先声明

•默认情况下,所有的变量都当做字符串处

理并以字符串存储,即使他们被赋值也是

如此

•在shell中,可以通过$变量名来访问它的内

var=abc

echo$var#abc

res=1+2

echo$res#1+2

引号的使用

•想要包含空白字符,使用双引号

・如果把$包含在双引号中,倒做替换

•如果把$包含在单引号中,不会发生替换,

可以用转义符'

var=abc

echo$var

echo"$var”

echo'$var'

echo\$var

环境变量

环境变量说明

$HOME当前用户主目录

$PATH搜索路径

$PS1命令提示符

$PS2二级提示符,用来提示后续输入,通常为>

$IFS输入域分隔符,当shell读取输入时,用来分隔单

词的一组字符,通常是制表符、空格、换行符

$0Shel脚枫jg霞

$#传递给脚本的参数个数

$$Shell脚本的进程号,脚本通常用它来生成一个唯

一的临时文件,如/tmp/tmpfile_$$

参数变量

•如果脚本程序调用时带有参数,一些额外

的变量就会被创建,即使没有变量传入,

.「—工~~4I1,,》『一/->.I、—■—d-2_II仁__t1、4_2L,,.,,1▲、丁

参数变量说明

$1,$2,$3…脚本程序的参数

$*在一个变量中列出所有参数,各参数之

间用IFS环境变量中的第一个字符分隔开,

如果IFS被修改,那么S*的分隔方式也随

之改变

$®$*的一种变体,它不使用IFS环境变量

条件

•test或[]

-布尔判断命令

test-ffile

[-ffile]

r口人人dLJ、Iu~i~r、,-■/

字符串比较结果

stringl=string2相同为真

stringl!=string2不同为真

-nstring不为空为真

-zstring如果为null则为真

算术比较结果

expri-eqexpr2两个表达式相等结果为真

expri-neexpr2两个表达式不等结果为真

expri-gtexpr2如果1大于2结果为真

expri-geexpr2如果1大于等于2结果为真

expri-Itexpr2如果1小于2结果为真

axnrl—心axor2力口黑1干藻干,幺吉果为直

文件测结果

-dfile如果是目录则为真

-efile如果文件存在则结果为真,可能不能移植,尽量

使用-f

-ffile文件是普通文件则为真

-rfile文件可读为真

-sfile文件大小不为0为真

控制结构-if

•if语句

ifcondition

then

statements

else

statements

fi

•elif语句

•给变量加上引号

-当变量没值时也可以确保一个合法的测试

控制结构-for

•for语句

forvarinvalues

do

statements

done

-简单的for示例

forfooinabcdef123

do

echo$foo

done

一停用小八

while循环

•for特别适合于对一系列字符串进行处理,

而while适合于处理不知道执行次数的情况

whileconditiondo

statements

done

・示例,一个简单的密码验证程序

echoTnterpassword:,5

readpass;

while["$pass"!="abc123”];do

echoTrror,tryagain55

until语句

•语法:

untilconditionn

do

statements

done

•与while相似,只是条件反过来了

untilwho|grep"$1”>/dev/null

do

sleep60

done

case语句

•语法

casevarin

pattern[|pattern]...)statements;;

pattern[|pattern]...)statements;;

esac

•注意,每个模式行用双分号(;;)结束

caseu$var,5in

yes)echoyes;;

no)echono;;

*)echodefault;

case语句

•case只匹配一个分支,即使其他的分支也

成上

caseu$var,Jin

yes|y|Yes|YES)echoOK;;

n*|N*)echoNo;;

*)echoother

esac

case"$vadin

命令列表

•and歹U表

一statementl&&statememt2&&statememt3

&&

if[-ffilea]&&echo“hello"&&[-ffileb]&&

other

then

echo“inif”

else

echo“inelse55

fi

~rrtI-hr

语句块

•如果想在某些只允许使用单个语句的地方

使用多条语句,可以把他们括在{}中来构造

一个语句块

get_confirm&&{

grep-v"stcT$file>$otherfile

cat$otherfile

echo

add

)

函数

函数

•可以在shell中定义函数,如果写的shell程

序是大型的,函数是一种很好的选择

•在shell中定义函数,只需一个名字,一对

括号和函数体

function_name(){

statements

)

一个简单的函数

foo(){

echo“functionfoo”

)

echo“startscripf

foo

echo“endscripf

•有函数的脚本程序依然是从顶向下执行的

•必需有调用一个函数之前先定义,不存在

函数向前声明的概念

•当一个函数被执行时,脚本程序的位置参

调用函数

•可以用return命令让函数返回数字值

•并可以用$?获取返回码

•让函数返回字符串的常用方法是在函数中

将返回值保存到变量中

•此外,还可以echo一个字符串,捕获其结

果,如

foo(){echoABC;}

■■■

result="$(foo)”

•可以他用IccR关键字在shall雨豹中声明局

命令

命令

■内部命令和外部命令

•内部命令是由shell实现的,它不能做为外

部程序被调用,效率较高

・大多数内部命令同时提供独立运行的程序

版本,这是PISOX规范所要求的

命令

•break命令

-用于跳出for,whileuntil循环

•:命令

-空命令

-有时会被用于简化条件逻辑,相当于true

-while:被当作无限循环

-$(var:=value)以防止shell把var当作一个命令

•continue

-使for,while,untile跳到下一次循环

source和点(.)

•.命令

一点(.)用于在当前shell中执行命令

-通常,当脚本执行外部命令或脚本时,会创建

新的环境(子shell),但,可以让我们在当前环境

下执行命令

-可以使用,让当前shell的环境设置改变

•source

一同.命令

echo

•输出结尾带有换行的字符串

・如何去掉换行符

-Linux常用的解决方法:

•echo-n“stringtooutpuf

—还有:

•echo-e"stringtooutput'c"

•\c表示去掉换行符

-为了更好的移植性时,可考虑使用printf

eval命令

,允许对参数求值,shell的内置命令

foo=10

x=foo

y=$$x

echo$y

以上代码结果为$句0

foo=10

x=foo

evaly=$$x

echo$y

exitn命令

•使用脚本程序以退出码n结束运行

•如果没有指定一个脚本的退出码,那最后

一条命令的状态将被用作返回值

己Jc11r~l~f二曰LLImCT4"I是可

以退出码说明

义留含

126文件不可执行

127命令未找到

128及以上出现一个信号

export命令

•将做为它参数的变量导出到子shell中有效。

默认情况下,一个shell中创建的变量在子

shell中是不可用的。

•一旦一个变量被导出,它就可以被该shell

调用的任何脚本使用,也可以被后续依次

调用的任何shell使用

expr命令

•将参数当作表达来求值

-x=Aexpr&x+T

表达式示值说明

•€expri|expr2如果expr非零,则等于expri,否则

等于expr2

expri&expr2只要有一个为零,则为零,否则等

于expri

expri=expr2

expri>expr2

expri>=expr2

expri+expr2

printf

•语法

-printfuformartstring55parameterl

parameter2...

•新版的shell支持这个命令

•功能和c语言的函数printf相似

•不支持浮点数输出

printf"%s\n"hello

printfu%s%d\t%s”“HiThere”15people

set命令

•为shell设置参数变量

setabcdef123

echo$1

echo$2

echo$3

set$(date)

echo$2

shift

•把所有参数变量左移一个位置,使$2变成

$1,$3变成$2,以此类推。原来$1的值会被

丢弃,$0保持不变

•shift可以指定一次左移的个数

・左移时,$*,$@,$#会随之改变

while[“$1"!=""];do

echo"$1”

shift

done

trap命令

•指定当接收到信号后将要采取的行动

・trap有两个参数:

-trapcommandsignal

-第一个参数是接收到信号所采取的行动,第二

个是什么信号

-如果command为则会重置信号处理方式为默

-如果command为",则会忽略某个信号

trapINT

unset

•从环境中删除变量和函数

foo="Hello”

echo$foo

unsetfoo

echo$foo

作用和foo二差不多,但不同

find命令

•find[path][options][tests][actions]

•工

-depth在查看目录本身之前先搜索目录的

内容

-follow跟随符号链接

-maxdepthsN最多搜索N层目录

-mount(或-xdev)不搜索其他文件系统

find命令

测试含义

-atimeN文件在N天之前被最后访问过

-mtimeN文件在N天之前被最后修改过

-name文件名匹配提供的模式

pattern

-newer文件比otherfile要新

otherfile

-typec文件的类型为c,c是特殊类型,d为目录

f为普通文件

-user文件拥有者是指定用户

username

find命令

.♦口八,心大

操作符,短格操作符,长格式含义

!-not测试取反

-a-and两个测试都必需为

-o-or两个测试有一个必

需为真

•可以用圆括号改变测试的优先级,不过为

了不让shell处理圆括号,需要进行转义

find命令

动作含义

-execcommand执行一条命令,必需以\;结束

-okcommand与-exec类似,但在执行命令之前对

每个要处理的文件提示用户确认,必

需以\;结束

-print默认动作,打印文件名

-Is对当前文件使用命令ls-dils

find.-newerfile2-typef-execIs-I{}\;

grep命令

•GeneralRegularExpressionParse

-通用正则表达式解析器

一语法:greap[options]PATTERN[FILES]

-LLT中、、,九十-彳日人A、匹Ji:匕=fc二,一、/A也人、

选项含义

-C输出匹配行的数目

-E启用扩展表达式

-h取消每个输出行的普通前缀

4只列出包含匹配的文件名

-V模式取反

正则表达式

Lrrh1日人n~r~A/rtzfa

特殊字符含义

A行首

$行尾

,任意单个字符

[]一个范围内的字符,或加八表示不在一个

范围内的字符

正则表达式

匹配模式含义

[:alnum:]字母与数字字符

[:alpha:]

[:ascii:]ASCH字符

[:blank:]空格或制表符

[:cntrk]ASCII控制字符

[:digit:]

[:graph:]非控制、非空格

[:lower:]小写字母

[:print:]可打印字符

[:punct:]标点符号字符

[:space:]空白字符

■।।r\r\cir・

正则表达式

选项

温馨提示

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

评论

0/150

提交评论