shell编程基础(初学入门)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Shell编程基础龚关gong.guan@gd-linux.comShell基础什么是shellshell是计算机用来解释你输入的命令然后决定进行何种处理的程序。是用户和Linux内核之间的接口程序。也在非交互模式下调用。Shell分类在Linux系统下有几个不同的shell:bashBourneAgainshell是Bourneshell的扩展shBourneshell,在很多UNIX下是标准的shellcshCshell,和C语言语法相近,大部分UNIX下有效pdkshpublicdomainKornshelltcsh微型Cshell,在小的系统里经常使用Bashshell是GNU计划的重要工具软件之一BashshellGNU操作系統中标准的shell.查看你自己的shell类型:echo$SHELLshell基本语法输入输出重定向“”和“”“”和“”1:正确重定向2:错误重定向&:正确和错误一起重定向shell基本语法管道pipecommand1|command2[|command3...]前台和后台“;”和“&”执行顺序&&和||Shell环境变量环境变量shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,这些变量用户还可以重新定义;用户可以用set、env命令查看$HOME使用者自己的目录$PATH执行命令时所搜寻的目录$TZ时区$MAILCHECK每隔多少秒检查是否有新的信件$PS1在命令列时的提示号$PS2当命令尚未打完时,Shell要求再输入时的提示号$MANPATHman指令的搜寻路径Shell预定义变量预定义变量预定义变量和环境变量相类似,也是在shell一开始时就定义了的变量,所不同的是,用户只能根据shell的定义来使用这些变量,而不能重定义它。所有预定义变量都是由$符和另一个符号组成的$0这个程式的执行名字$n这个程式的第n个参数值,n=1..9$*这个程式的所有参数$#这个程式的参数个数$$这个程式的PID$!执行上一个背景指令的PID$?执行上一个指令的返回值Shell预定义变量举例#!/bin/bashecho$0echo$1$2$3echo$#echo$$echo$*Shell用户变量用户定义的变量变量名=变量值declare[-afirx]变量名=变量值变量名前不应加符号“$”,在引用变量的内容时则应在变量名前加“$”;在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串都要用双引号括起来建议所有的变量名都用大写字母来表示变量的只读性:readonly变量名整个shell使用变量export变量名Shell用户变量举例用户定义的变量#!/bin/bashname=V.Birdmyname1=Mynameis$namemyname2='Mynameis$name'echo$nameecho$myname1echo$myname2shell特殊符号使用shell使用两种引号和反斜线双引号“”(让引号内的变量生效)单引号‘’(引号内的变量当作一个字符使用)反斜线\(禁用特殊字符功能\$)后引号``(让引号内的命令生效)[root@gdlcshell]#var=gong[root@gdlcshell]#echovaris$varvarisgong[root@gdlcshell]#echo'varis$var'varis$var[root@gdlcshell]#echo'varis\$var'varis\$var[root@gdlcshell]#echovaris\$varvaris$var[root@gdlcshell]#echo`ls`fileggg.shtime.shttt.shshell逻辑判断逻辑判断1.文件与目录-f文件是否存在-d目录是否存在-b是否为block文件-c是否为character文件-S是否为socket文件-L是否为symboliclink文件-e是否存在!2.程序-G是否由GID所执行的程序所拥有-O是否由UID所执行的程序所拥有3.文件属性-r是否为可读的屬性-w是否为可以写入的屬性-x是否为可執行的屬性-s是否为非空白文件-u是否具有SUID的屬性-g是否具有SGID的屬性4.两个文件之间的对比-nt第一个文件比第二个文件新-ot第一个文件比第二个文件旧-ef第一个文件与第二个文件为同一文件(link之类)shell运算运算=等于!=不等于小于大于-eq等于-ne不等于-lt小于-gt大于-le小于或等于-ge大于或等于-a双方都成立(and)-o单方成立(or)-z空字串-n非空字串shell逻辑判断与运算举例if[-d$file]thenecho“$fileisadirectory”elif[-f$file]thenif[-r$file–a–w$file–a–x$file]thenecho“youhaver-w-xpermissionon$file.”fielseecho“$fileisneitherafilenoradirectory”fi正则表达式正则表达式正则表达式(regularexpression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。基本元字符集及含义基本元字符集^只匹配行首$只匹配行尾*只一个单字符后紧跟*,匹配0个或多个此单字符[]只匹配[]内字符\只用来屏蔽一个元字符的特殊含义.只匹配任意单字符pattern\{n\}只用来匹配前面pattern出现次数。n为次数pattern\{n,m\}只用来匹配前面pattern出现次数。n为次数,但pattern出现次数在n与m之间模式基本模式匹配^once这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串“onceuponatime”匹配,与“ThereoncewasamanfromNewYork”不匹配。模式字符簇要判断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的,需要建立字符簇举例说明[a-z]匹配所有的小写字母[a-zA-Z]匹配所有的字母[0-9]匹配所有的数字[0-9\.\-]匹配所有的数字,句号和减号[\f\r\t\n]匹配所有的白字符[^a-z]除了小写字母以外的所有字符[^\\\/\^]除了(\)(/)(^)之外的所有字符[^\“\‘]除了双引号(”)和单引号(')之外的所有字符模式确定重复出现^[a-zA-Z_]$所有的字母和下划线^a{4}$aaaa^a{2,4}$aa,aaa或aaaa^a{1,3}$a,aa或aaa^a{2,}$包含多于两个a的字符串a{2,}如:baad和aaa,但Nantucket不行\t{2}两个制表符.{2}所有的两个字符^[a-zA-Z0-9_]{1,}$所有包含一个以上的字母、数字或下划线的字符串^[0-9]{1,}$所有的正数^\-{0,1}[0-9]{1,}$所有的整数^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$所有的小数常用正则表达式常用的正则表达式$匹配行结尾^匹配行开头\表示转义[iI]对大写或小写I[^$]对空行^......$对包括6个字符的行[Ss]igna[lL]对匹配单词signal、signaL、Signal、SignaL[Ss]igna[lL]\.对同上,但加一句点^USER$对只包含USER的行[tty]$对以tty结尾的行\.对带句点的行^d..x..x..x对用户、用户组及其他用户组成员有可执行权限的目录^[^l]对排除关联目录的目录列表[.*0]对0之前或之后加任意字符[000*]对000或更多个[^.*$]对匹配行中任意字符串常用正则表达式常用的正则表达式[a-zA-Z]对任意单字符[a-z][a-z]*对至少一个小写字母[^0-9\$]对非数字或美元标识[^0-0A-Za-z]对非数字或字母[123]对1到3中一个数字[Dd]evice对单词device或Device\^q对以^q开始行^.$对仅有一个字符的行^\.[0-9][0-9]对以一个句点和两个数字开始的行'Device'对单词deviceDe[Vv]ice\.对单词Device或deVice[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}对日期格式dd-mm-yyyy[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}对IP地址格式nnn.nnn.nnn.nnn[^.*$]对匹配任意行Grep使用grep语法grep[选项]基本正则表达式或字串[文件]选项:-c只输出匹配行的计数。-i不区分大小写(只适用于单字符)。-h查询多文件时不显示文件名。-l查询多文件时只输出包含匹配字符的文件名。-n显示匹配行及行号。-s不显示不存在或无匹配文本的错误信息。-v显示不包含匹配文本的所有行。正则表达式举例正则表达式举例#more/etc/passwd|grep^rroot:x:0:0:root:/root:/bin/bashrpm:x:37:37::/var/lib/rpm:/sbin/nologinrpc:x:32:32:PortmapperRPCuser:/:/sbin/nologinrpcuser:x:29:29:RPCServiceUser:/var/lib/nfs:/sbin/nologin#more/etc/passwd|grepbash$root:x:0:0:root:/root:/bin/bashadmin:x:500:500::/home/admin:/bin/bashgongguan:x:501:501::/home/gongguan:/bin/bashuser1:x:502:502::/home/user1:/bin/bash练习练习1、改变系统提示符为@^@。2、只列出当前目录下所有目录。3、创建文件1和2,将文件1的内容从定向到2。

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功