《Linux shell 逻辑运算符 逻辑表达式详解.docx》由会员分享,可在线阅读,更多相关《Linux shell 逻辑运算符 逻辑表达式详解.docx(12页珍藏版)》请在第壹文秘上搜索。
1、shell的逻辑运算符涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果。一、逻辑运算符1、逻辑卷标表示意思1)关于档案与目录的侦测逻辑卷标f常用!侦测档案是否存在eg:ifffilenamed常用!侦测目录是否存在b侦测是否为一个block档案c侦测是否为一个character档案S侦测是否为一个socket标签档案1.侦测是否为一个ITsymbolicIink的档案e侦测某个东西是否存在!2)关于程序的逻辑卷标G侦测是否由GID所执行的程序所拥有0侦测是否由UID所执行的程序所拥有P侦测是否为程序间传送信息的namepipe或是FIFo(老实说,这个不太懂!
2、)3)关于档案的属性侦测r侦测是否为可读的属性W侦测是否为可以写入的属性X侦测是否为可执行的属性S侦测是否为非空白档案U侦测是否具有FSUlDj的属性g侦测是否具有FSGlDj的属性k侦测是否具有stickybit的属性4)两个档案之间的判断与比较;Wtestfilelntfile21nt第一个档案比第二个档案新ot第一个档案比第二个档案旧ef第一个档案与第二个档案为同一个档案(link之类的档案)5)逻辑的和(and)J或(Or)J&逻辑的AND的意思Il逻辑的OR的意思2、运算符号代表意义二等于应用于:整型或字符串比较如果在U中,只能是字符串!二不等于应用于:整型或字符串比较如果在口中,只
3、能是字符串V小于应用于:整型比较在中,不能使用表示字符串大于应用于:整型比较在U中,不能使用表示字符串eq等于应用于:整型比较ne不等于应用于:整型比较It小于应用于:整型比较gt大于应用于:整型比较Ie小于或等于应用于:整型比较ge大于或等于应用于:整型比较a双方都成立(and)逻辑表达式-a逻辑表达式0单方成立(or)逻辑表达式-0逻辑表达式Z空字符串n非空字符串二、逻辑表达式1、test命令使用方法:testEXPRESSION如:lrootlocalhost-l#test1=1&echookokIroOtloCaIhoSt#testd/etc/&echookoklrootlocalho
4、st-#test1eq1&echookoklrootlocalhost-#iftest1=1henecho,okfiok注意:所有字符与逻辑运算符直接用“空格”分开,不能连到一起。2、精简表达式U表达式lrootlocalhost|#l1eq1&echookokrootkCaIhOSV1&echookbash:2:Nosuchfileordirectoryrootlocalhost#21fe,需要加转义字符,表示字符串大小比较,以acill码位邕作为比较。不直接支持运算符,还有逻辑运算符|&它需要用aandj-oor表示表达式rootlocalhost-#1eq1&echookokrootlo
5、calhost-$25&echookok注意:山运算符只是口运算符的扩充。能够支持v,符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符:|&3、性能比较bash的条件表达式中有三个几乎等效的符号和命令:test,和川。通常,大家习惯用if;then这样的形式。而山的出现,根据ABS所说,是为了兼容之类的运算符。以下是比较它们性能,发现是最快的。Stime(formin1.1(XXXX);dotestd.;done;)realm.658suserm.558ssys0m0.100sStime(formin1.1OOOOO;dod.;done;)rea10m0.609suserm.5
6、24ssys0m0.085sStime(fo11nin1.100000;dod.;done;)realm.311suserm.275ssys0m0.036s不考虑对低版本bash和对Sh的兼容的情况下,用川是兼容性强,而且性能比较快,在做条件运算时候,可以使用该运算符。附1.inuxShell脚本总结及语法速查1.HelloWorld1.1. 基本结构创建helloWorld.sh文件,写入如下内容:#!/bin/bashechonhelloworldM其中#!告诉系统其后路径所指定的程序是解释此脚本文件的Shell程序,常见的Shell程序有以下几类(可通过命令cat/etc/shells查
7、看):BourneShell(usrbinsh或/bin/Sh)BourneAgainShell(binbash)CShell(usrbincsh)KShell(usrbinksh)ShellforRoot(sbinsh)Others其中Bash在日常工作中被广泛使用,同时也是大多数1.inux系统默认的Shello执行该Sh脚本#增加可执行权限chmodu+xhelloWorld.sh#运行脚本-.helloWorld.sh或-shhellowWorld.sh1.2. 注释单行注释以#开头的行是注释多行注释方式一:用一对括起来,定义成一个函数,没有地方调用即达到注释的效果。方式二::EOF注
8、释内容注释内容.注释内容EOF2.基本语法2.1. 变量变量定义如下示例:VARl=whoru,VAR2=100var3=datawwwvar4-name=11root变量名建议大写;有效字符仅能包含字母、数字、下划线,首个字符不能以数字开头;=两边不能有空格;不能使用标点符号;不能使用bash里的关键字(可用help命令查看保留关键字)。访问变量$VARl或$(Var1),其中,加花括号是为了帮助解释器识别变量的边界。设置变量只读readonlyVARl删除变量(不适用于只读变量!)UnsetVARl22字符串值用双引号”或单引号”表示双引号里可以有变量;双引号里可以出现转义字符;单引号里的
9、任何字符都会原样输出;单引号字符串中的变量是无效的;单引号单限制:双引号的优点:其它# 字符串拼接name=,xiaolivar2=hello,H$name#出hello,xiaoli# 获取字符串长度string=abcdecho$#String#输出4# 提取子字符串msg=11zhangsanisagoodmanecho$msg:l:4#输出hang2.3. 数组bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素的下标由O开始,获取数组元素要用到下标。定义:array1=(valuevalueIValUe2value3)或array20=value0array2l=
10、valuelarray22=value2读取#指定下标的元素echo$array2l2);/输出value2#获取数组所有元素echo$array2*;/输出ValueOvalue1value2echo$array2J)获取数组元素个数0(0$#%丫2;输出3echo$#array2l*J);取得数组中指定下标元素的字符长度echo$(#array22;2.4. 传递参薮在执行SheII脚本时,可以向脚本传递参数,脚本内获取参数的格式为$n,这里的n指传递给脚本的第n个参数。如下脚本文件demo.sh:#!/bin/bashecho”执行的文件名:$0”;echo”第一个参数为:$1”;ech
11、o”第二个参数为:$2”;echo”第三个参数为:$3”;执行该文件,并传递参数,如下:-.demo3.shparam1param2param3执行的文件玄:.demo3.sh第一个参数为:param1第二个参数为:param2第三个参数为:param3其中,$0是一个特殊变量,代表当前脚本文件名,还有几个类似的变量如下:变量说明$#传递给脚本的参数个数。以一个单字符串的形式显示所有向脚本传递的参数,如$l$2.$n与$*相同,但是使用引号把每个参数包裹起来,箱最后一个执行的命令的退出状态:0正常;1或卜其它任何值,表示有错误$脚本运行的当前进程ID号$!最后一个后台命令的进程号。3 .运算符
12、3.1. 算数运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如awk和expr,其中expr最常用。假定有两个变量:a=10b=20运算符说明举例+加法expr$a+$b、结果为30。减法expr$a$b结果为IO0*乘法expr$a*$b结果为200o/除法expr$b/$a结果为2。取余expr$b$a结果为Oo赋值a=$b将把变量b的值赋给a。=用于比较两个数字是否相同$a=$b返回falseoI=用于比较两个数字是否不相同$a!=$b返回true。注意:表达式和运算符之间要有空格,如2+2是错误的,必须写成2+2;完整的表达式要被反引号、包裹起来;3.2. 关系
13、运算符关系运算符只支持数字,不支持字符串,除非字符串的值是数字。假定有两个变量:a=10b=20运算符说明举例eqnegtIt检测两个数是否相等检测两个数是否不相等检测左边的数是否大于右边的检测左边的数是否小于右边的$aeq$b返回falseo$ane$b返回true。返回true。geIe检测左边的数是否大于等于右边的检测左边的数是否小于等于右边的$age$b返回falseo3.3. 布尔操作符假定有两个变量:a=10b=20举例运算符说明!false返回true。非运算,表达式为true则返回false,否则返回trueo或运算,有一个表达式为$alt20o$bgtl00返回true则返回trueotrue。与运算,两个表达式都为$alt20a$bgtl00返回true才返回true。false3.4.逻辑运算符假定有两个变量:a=10b=20运算符说明举例逻辑&的altl(M)&A