




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程内容
•什么是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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度职业教育培训机构导师聘用合同
- 2025年度绿色能源合资项目合同范本
- 二零二五年度时尚服饰店门面房买卖协议
- 二零二五年度演出活动主办方观众免责协议模板
- 二零二五年度综合医院与专科医院双向转诊合作协议书
- 2025年度航空航天知识产权保护及保密合同
- 二零二五年度退股股权变更与风险控制协议
- 2025年度装修公司拖欠工资无劳动合同纠纷解决协议
- 二零二五年度金融科技内部股东股权转让合同范本
- 二零二五年度石英石采矿权转让合同
- 一年级话说温州1可爱的水乡课件
- 冲压工艺及冲压质量
- 整体煤气化联合循环课件
- 地质灾害防治培训ppt版(共43)
- 慕白的诗(十二首)
- 2022年苏州市吴中产业投资集团有限公司招聘笔试题库及答案解析
- 公务员职务和级别工资档次套改及级别对应表
- 住院总岗位职责
- 眼科常用药课件
- 中药封包疗法课件
- 管道工程预算
评论
0/150
提交评论