Linux Shell 逻辑运算符与逻辑表达式详解
linux shell 逻辑运算符、逻辑表达式详解
一、逻辑运算符
逻辑卷标表示意思
1. 关于档案与目录的侦测逻辑卷标!
-f 常用!侦测『档案』是否存在eg: if [ -f filename ]
-d 常用!侦测『目录』是否存在
-b 侦测是否为一个『block 档案』
-c 侦测是否为一个『character 档案』
-S 侦测是否为一个『socket 标签档案』
-L 侦测是否为一个『symbolic link 的档案』
-e 侦测『某个东西』是否存在!
2. 关于程序的逻辑卷标!
-G 侦测是否由GID 所执行的程序所拥有
-O 侦测是否由UID 所执行的程序所拥有
-p 侦测是否为程序间传送信息的name pipe 或是FIFO (老实说,这个不太懂!)3. 关于档案的属性侦测!
-r 侦测是否为可读的属性
-w 侦测是否为可以写入的属性
-x 侦测是否为可执行的属性
-s 侦测是否为『非空白档案』
-u 侦测是否具有『SUID 』的属性
-g 侦测是否具有『SGID 』的属性
-k 侦测是否具有『sticky bit 』的属性
4. 两个档案之间的判断与比较;例如[ test file1 -nt file2 ]
-nt 第一个档案比第二个档案新
-ot 第一个档案比第二个档案旧
-ef 第一个档案与第二个档案为同一个档案(link 之类的档案)
5. 逻辑的『和(and)』『或(or)』
&& 逻辑的AND 的意思
|| 逻辑的OR 的意思
二、逻辑表达式
test 命令
使用方法:test EXPRESSION
如:
[root@localhost ~]# test 1 = 1 && echo 'ok'
ok
[root@localhost ~]# test -d /etc/ && echo 'ok'
ok
[root@localhost ~]# test 1 -eq 1 && echo 'ok'
ok
[root@localhost ~]# if test 1 = 1 ; then echo 'ok'; fi
ok
注意:所有字符与逻辑运算符直接用“空格”分开,不能连到一起。
精简表达式
使用方法:[] 表达式
如:
[root@localhost ~]# [ 1 -eq 1 ] && echo 'ok'
ok
[root@localhost ~]# [ 2 < 1 ] && echo 'ok'
-bash: 2: No such file or directory
[root@localhost ~]# [ 2 \< 1 ] && echo 'ok'
[root@localhost ~]# [ 2 -gt 1 -a 3 -lt 4 ] && echo 'ok'
ok
[root@localhost ~]# [ 2 -gt 1 && 3 -lt 4 ] && echo 'ok'
-bash: [: missing `]'
注意:在[] 表达式中,常见的>,<需要加转义字符,表示字符串大小比较,以acill 码位置作为比较。
不直接支持<>运算符,还有逻辑运算符|| &&它需要用-a[and] –o[or]表示
使用方法:[[]] 表达式
如:
[root@localhost ~]# [ 1 -eq 1 ] && echo 'ok'
ok
[root@localhost ~]$ [[ 2 < 3 ]] && echo 'ok'
ok
[root@localhost ~]$ [[ 2 < 3 && 4 > 5 ]] && echo 'ok'
ok
注意:[[]] 运算符只是[]运算符的扩充。
能够支持<,>符号运算不需要转义符,它还是以字符串比较大小。
里面支持逻辑运算符:|| &&
三、性能比较
bash的条件表达式中有三个几乎等效的符号和命令:test,[]和[[]]。
通常,大家习惯用if [];then这样的形式。
而[[]]的出现,根据ABS所说,是为了兼容><之类的运算符。
以下是比较它们性能,发现[[]]是最快的。
$ time (for m in {1..100000}; do test -d .;done;)
real 0m0.658s
user 0m0.558s
sys 0m0.100s
$ time (for m in {1..100000}; do [ -d . ];done;)
real 0m0.609s
user 0m0.524s
sys 0m0.085s
$ time (for m in {1..100000}; do [[ -d . ]];done;)
real 0m0.311s
user 0m0.275s
sys 0m0.036s。
linux 数值表达式
linux 数值表达式
Linux 数值表达式是一种用于计算数值的表达式,可以在shell脚本或命令行中使用。
常见的数值表达式包括算术运算、比较运算和逻辑运算。
1. 算术运算:可以使用加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)等运算符进行数值计算。
例如:
- `echo $((2 + 3))` // 输出:5
- `echo $((5 * 4))` // 输出:20
- `echo $((10 / 3))` // 输出:3
2. 比较运算:可以使用比较运算符(-eq、-ne、-lt、-le、-gt、-ge)比较两个数的大小,并返回结果为真(0)或假(1)。
例如:
- `if [ $a -eq $b ]; then echo "a equals b"; fi` // 如果$a等于$b,则输出"a equals b"
3. 逻辑运算:可以使用逻辑运算符(&&、||)对数值表达式进行逻辑运算。
例如:
- `if [ $a -gt 0 ] && [ $a -lt 10 ]; then echo "a is between 0 and 10"; fi` // 如果$a大于0并且小于10,则输出"a is between 0 and 10"
还可以使用变量、函数和其他命令的输出作为数值表达式的一部分。
例如:
- `a=5`
- `b=$((a + 2))` // 将a加2并赋值给b
请注意,在数值表达式中使用变量时,需要在变量名前加上$符号。
shell 多个条件判断
shell 多个条件判断Shell脚本是一种非常常见的编程语言,它可以用于各种不同的任务,如自动化部署、数据处理、系统管理等等。
在Shell脚本中,条件判断是非常重要的一部分,因为它可以让我们根据不同的情况执行不同的操作。
本文将介绍Shell脚本中多个条件判断的使用方法。
一、if语句if语句是Shell脚本中最常用的条件判断语句之一,它可以根据条件执行不同的操作。
if语句的基本语法如下:```if [ 条件 ]then操作1else操作2fi```其中,条件可以是任意逻辑表达式,操作1和操作2分别是在条件成立和不成立时执行的命令。
这个语法中的方括号是必须的,它们表示条件的开始和结束。
下面是一个简单的例子,它会根据用户输入的数字判断是奇数还是偶数:```echo '请输入一个数字:'read numif [ $(expr $num % 2) -eq 0 ]thenecho '这是一个偶数'elseecho '这是一个奇数'fi```在这个例子中,我们使用了expr命令来计算$num除以2的余数,然后判断余数是否等于0,如果等于0则$num是偶数,否则是奇数。
二、case语句case语句是另一种常见的条件判断语句,它可以根据不同的条件执行不同的操作。
case语句的基本语法如下:```case 变量 in模式1)操作1;;模式2)操作2;;*)操作3;;esac```其中,变量是需要匹配的变量,模式1和模式2是需要匹配的模式,操作1和操作2是在变量匹配对应模式时执行的命令,而操作3则是当变量不匹配任何模式时执行的命令。
下面是一个例子,它会根据用户输入的字母判断是元音字母还是辅音字母:```echo '请输入一个字母:'read lettercase $letter in[aAeEiIoOuU])echo '这是一个元音字母';;*)echo '这是一个辅音字母';;esac```在这个例子中,我们使用了正则表达式[aAeEiIoOuU]来匹配元音字母,如果匹配成功则输出“这是一个元音字母”,否则输出“这是一个辅音字母”。
linux系统之Shell运算符linux5
Shell编程运算符shell变量的缺点:弱类型、默认是字符串的、一:declare命令声明变量类型#declare [+/-] [选项] 变量名选项:”-”号:给变量设定类型属性“+”号:取消变量的类型属性-a :将变量声明为数组型-i :将变量声明为整数型-x :将变量声名为环境变量-r :将变量声明为只读变量-p :显示指定变量的被声明的类型1、把变量声明成数值型#aa=11#bb=22#declare -i cc=$aa+$bb#echo $cc#33#declare -pdeclare -i cc=”33”注意:声明变量cc的类型是整数型,它的值是aa和bb的和2、定义数组[root@localhost~]#movie[0]=zp[root@localhost~]#movie[1]=tp[root@localhost~]#declare -a movie[2]=live查看数组[root@localhost~]#echo${movie} //调用第一个文件[root@localhost~]#echo${movie[2]} //指定调用[root@localhost~]#echo${movie[*]} //调用all注意:有下标的[n] 系统默认是数组类型#movie[0]=c1#movie[1]=tpc#movie[2]=declare -a movie[2]=tpb#echo ${movie[*]}cl tpc tpb#echo ${movie[1]}tpc#echo ${movie}c13、声明环境变量declare -x text=123#和export作用相似,但其实是declare命令的作用4、声明变量为只读属性[root@localhost~]#declare -r test#给test赋予只读属性,但是请注意只读属性会让变量不能修改、不能删除、甚至不能取消只读属性,重启后自动消失,如果将他加在了开机启动文件中,要注意其用法。
shell if 逻辑与条件
shell if 逻辑与条件摘要:一、Shell 简介二、if 条件语句在Shell 中的使用三、逻辑运算符在Shell 中的使用四、条件语句的组合五、Shell 脚本实例分析正文:Shell 是一种命令行解释器,它可以执行Linux 系统中的各种命令。
Shell 脚本是一种文本文件,其中包含了一系列的Shell 命令。
通过编写Shell 脚本,我们可以实现自动化操作,提高工作效率。
在Shell 脚本中,if 条件语句是非常常用的。
它可以根据特定条件执行相应的命令。
if 条件语句的基本语法如下:```if 条件1; then命令1elif 条件2; then命令2else命令3fi其中,条件1、条件2 和命令1、命令2、命令3 可以是各种Shell 命令和表达式。
当条件1 成立时,执行命令1;当条件2 成立时,执行命令2;如果条件都不成立,则执行命令3。
在Shell 中,逻辑运算符也是非常重要的。
常用的逻辑运算符包括:`&&`(逻辑与)、`||`(逻辑或)和`!`(逻辑非)。
这些运算符可以用来组合多个条件,以便更精细地控制脚本的执行流程。
例如,我们可以使用`&&`运算符来实现多个条件的逻辑与:```if 条件1 && 条件2; then命令fi```当条件1 和条件2 都成立时,才会执行命令。
同样地,我们可以使用`||`运算符来实现多个条件的逻辑或:```if 条件1 || 条件2; then命令fi```当条件1 或条件2 成立时,就会执行命令。
此外,我们还可以使用`!`运算符来实现逻辑非:if ! 条件; then命令fi```当条件不成立时,执行命令。
在实际应用中,我们可以将多个条件语句和逻辑运算符组合起来,实现复杂逻辑的控制。
例如,我们可以编写一个Shell 脚本来检查用户输入的命令是否合法:```#!/bin/bashread -p "请输入命令:" commandif [[ $command =~ ^w+$ ]] && command -v "$command" >/dev/null; thenecho "命令合法"elseecho "命令不合法"fi```这个脚本首先读取用户输入的命令,然后使用`[[ ]]`和`command`命令来检查命令是否合法。
linuxshell中ifelse以及大于、小于、等于逻辑表达式介绍
linuxshell中ifelse以及⼤于、⼩于、等于逻辑表达式介绍在linux shell编程中,⼤多数情况下,可以使⽤测试命令来对条件进⾏测试,这⾥简单的介绍下,⽐如⽐较字符串、判断⽂件是否存在及是否可读等,通常⽤"[]"来表⽰条件测试。
注意:这⾥的空格很重要。
要确保⽅括号的空格。
笔者就曾因为空格缺少或位置不对,⽽浪费好多宝贵的时间。
if ....; then....elif ....; then....else....fi[ -f "somefile" ] :判断是否是⼀个⽂件[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执⾏权限[ -n "$var" ] :判断$var变量是否有值[ "$a" = "$b" ] :判断$a和$b是否相等-r file ⽤户可读为真-w file ⽤户可写为真-x file ⽤户可执⾏为真-f file ⽂件为正规⽂件为真-d file ⽂件为⽬录为真-c file ⽂件为字符特殊⽂件为真-b file ⽂件为块特殊⽂件为真-s file ⽂件⼤⼩⾮0时为真-t file 当⽂件描述符(默认为1)指定的设备为终端时为真含条件选择的shell脚本对于不含变量的任务简单shell脚本⼀般能胜任。
但在执⾏⼀些决策任务时,就需要包含if/then的条件判断了。
shell 脚本编程⽀持此类运算,包括⽐较运算、判断⽂件是否存在等。
基本的if条件命令选项有: - eq —⽐较两个参数是否相等(例如,if [ 2 –eq 5 ])-ne —⽐较两个参数是否不相等-lt —参数1是否⼩于参数2-le —参数1是否⼩于等于参数2-gt —参数1是否⼤于参数2-ge —参数1是否⼤于等于参数2-f — 检查某⽂件是否存在(例如,if [ -f "filename" ])-d — 检查⽬录是否存在⼏乎所有的判断都可以⽤这些⽐较运算符实现。
shell括号和linux算术运算
shell括号和linux算术运算⼀、⼩括号()1、单⼩括号()a).命令组(a=0;touch a.txt)⼩括号中的内容会开启⼀个⼦shell独⽴运⾏;括号中以分号连接,最后⼀个命令不需要;各命令和括号⽆空格b).命令替换$()等于``c).⽤于初始化数组。
[root@drbd-s scripts]# y=(a b c d)[root@drbd-s scripts]# echo ${y[3]}d[root@drbd-s scripts]# echo ${y[*]} #获取所有数组a b c d2、双⼩括号(( )) 加上$做算术运算1. 省去$符号的算数运算,⽐较 + -for((i=0;i<5;i++))[root@drbd-s scripts]# for ((i=0;i<5;i++));do echo $i;doneif (($i<5))a=5; ((a++)) 可将 $a 重定义为6括号内⽀持多个表达式⽤逗号分开。
b.) 跨进制运算⼆进制、⼋进制、⼗六进制运算时,输出结果全都⾃动转化成了⼗进制。
如:echo $((16#5f)) 结果为95 (16进位转⼗进制)⼆、中括号1、单中括号[ ] 加上$做算术运算字符串⽐较——==和!=整数⽐较——不等于:-gt:⼤于;-lt :⼩于;-eq:等于;-ne数组索引——array[0]2.双中括号[[]]字符串⽐较——可以把右边的作为⼀个模式,⽽不仅仅是⼀个字符串[[ hello == hell? ]],结果为真。
[[ ]] 中匹配字符串或通配符,不需要引号。
逻辑运算符——防⽌脚本许多逻辑错误,⽐如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。
⽐如可以直接使⽤if [[ $a != 1 && $a != 2 ]], 如果不适⽤双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
linux shell 布尔运算
linux shell 布尔运算在Linux Shell 脚本中,可以使用各种布尔运算符来进行条件判断和逻辑运算。
以下是一些常用的布尔运算符:1.逻辑与(&&):如果两个条件都为真,则整个表达式为真。
if [ "$a" -gt 0 ] && [ "$b" -lt 10 ]; thenecho "Both conditions are true."fi2.逻辑或(||):如果两个条件中至少有一个为真,则整个表达式为真。
if [ "$a" -eq 0 ] || [ "$b" -eq 10 ]; thenecho "At least one condition is true."fi3.逻辑非(!):反转条件的真假。
if [ ! -f "$file" ]; thenecho "The file does not exist."fi4.等于(==):测试两个值是否相等。
if [ "$str1" == "$str2" ]; thenecho "Strings are equal."fi5.不等于(!=):测试两个值是否不相等。
if [ "$num1" != "$num2" ]; thenecho "Numbers are not equal."fi6.比较:可以使用-eq(等于)、-ne(不等于)、-lt(小于)、-le(小于等于)、-gt(大于)、-ge(大于等于)等运算符进行数值比较。
if [ "$x" -gt "$y" ]; thenecho "x is greater than y."fi7.字符串比较:使用=(等于)、!=(不等于)、<(小于)、>(大于)等运算符进行字符串比较。
shell脚本之算术运算和逻辑运算
shell脚本之算术运算和逻辑运算⽬录算术运算赋值运算逻辑运算短路运算和异或条件测试数值测试字符串测试⽂件及其属性测试存在性测试存在性及类别测试⽂件权限测试⽂件特殊权限测试⽂件⼤⼩测试⽂件是否打开双⽬测试组合测试条件扩展read命令配置⽂件相关Bash退出任务关于$-变量算术运算Bash中我们可以进⾏算术运算,包括:+、-、*、/、%、**,分别是加,减,乘,除,取余,乘⽅。
我们有六种⽅式,实现上⾯的运算:(1) let var=算术表达式(2) var=$[算术表达式](3) var=$((算术表达式))(4) var=$(expr arg1 arg2 arg3 ...)(5) declare –i var = 数值(6) echo ‘算术表达式’ | bc有⼀点需要注意的是*在运算中需要转译即“\*”[root@CT71 ~]#let var1=1234[root@CT71 ~]#var2=$[12+32][root@CT71 ~]#var3=$((12+12))[root@CT71 ~]#var4=$( expr1 + 2 + 3 + 4 )[root@CT71 ~]#echo $var1 $var2 $var3 $var41234442410[root@CT71 ~]#let var5=2**10[root@CT71 ~]#let var6=2*10[root@CT71 ~]#echo"3 * 4" | bc12[root@CT71 ~]#var7=$( expr3 \* 5 )[root@CT71 ~]#echo $var5 $var7102415除此以外bash中还有内建的随机数⽣成器:$RANDOM(0-32767)如:echo [RANDOM%50] : 0-49之间随机数在算术运算和增强型赋值中,要使⽤let,let的具体⽤法请⾃⾏man let,它的功能是数字型运算和增强型赋值(下⾯会讲到)[root@CT71 ~]#echo $[$RANDOM%50]12[root@CT71 ~]#echo $[$RANDOM%50]25[root@CT71 ~]#echo $[$RANDOM%50]39[root@CT71 ~]#echo $[$RANDOM%50]19[root@CT71 ~]#赋值变量赋值,我们通常使⽤“=”,⽐如var=1234,就是把数值1234赋给var这个变量,此外我们还有其他的赋值⽅式,增强型赋值⽅式:+=, -=, *=, /=, %=⽐如:var=2let var+=23这是var的值是25除此以外,还有⾃增,⾃减:let var+=1let var++let var-=1let var--[root@CT71 ~]#var=2[root@CT71 ~]#let var+=23[root@CT71 ~]#echo $var25[root@CT71 ~]#let var++[root@CT71 ~]#echo $var26[root@CT71 ~]#let var-=1[root@CT71 ~]#echo $var25[root@CT71 ~]#逻辑运算我们在编写脚本中⽆论如何都少不了逻辑判断,我们通过逻辑判断来进⾏我们需要进⾏的操作,完成我们需要的功能。
shell if 逻辑与条件
shell if 逻辑与条件Shell if 逻辑与条件简介Shell脚本是一种在UNIX系统中常用的脚本语言,用于批处理任务和自动化任务。
在Shell脚本中,使用if语句可以根据条件执行不同的代码块。
本文将介绍Shell if语句的基本用法和逻辑与条件。
基本用法Shell if语句的基本语法如下:if [ condition ]thenstatements1elif [ condition ]thenstatements2elsestatements3fi其中,condition是一个表达式,可以使用比较运算符、逻辑运算符和字符串比较进行判断。
then后面是条件成立时要执行的代码块,elif后面是其他条件的判断块,else后面是如果都不满足条件时要执行的代码块。
在Shell脚本中,条件可以是数值、字符串或文件等。
比如:if [ $num -gt 10 ]thenecho "Number is greater than 10."elseecho "Number is less than or equal to 10."fi上述代码中,$num是一个变量,-gt是比较运算符,表示大于。
如果$num大于10,则输出”Number is greater than 10.”,否则输出”Number is less than or equal to 10.”。
逻辑与条件Shell提供了逻辑运算符来进行多个条件的判断。
常用的逻辑运算符有:•-a:与运算,表示逻辑与关系,两个条件都为真时返回真;•-o:或运算,表示逻辑或关系,两个条件有一个为真时返回真;•!:非运算,表示逻辑非关系,条件为假时返回真。
例如,以下代码判断一个数字是否大于0且小于100:if [ $num -gt 0 -a $num -lt 100 ]thenecho "Number is between 0 and 100."elseecho "Number is not between 0 and 100."fi上述代码中,$num是要判断的数字,-gt和-lt分别表示大于和小于。
linux 中 shell if else语句
linux 中 shell if else语句摘要:本文详细介绍了Linux中Shell脚本编程中的If-Else语句,包括其语法、使用方法以及示例。
通过学习本文,读者可以掌握如何在Shell脚本中实现条件判断,并根据条件执行不同的操作。
一、引言在Linux Shell脚本编程中,If-Else语句是实现条件判断的重要结构。
它允许根据条件的真假来执行不同的操作,从而实现程序的流程控制。
了解和掌握If-Else语句对于编写高效、灵活的Shell脚本至关重要。
二、If-Else 语句语法1.基本语法:2.条件测试:o字符串比较:=、!=o数字比较:-eq(等于)、-ne(不等于)、-gt(大于)、-lt(小于)、-ge(大于或等于)、-le(小于或等于)o文件测试:-e(存在)、-d(目录)、-f(普通文件)、-r(可读)、-w(可写)、-x(可执行)等3.示例:判断一个数字是否为正数、负数或零:三、使用注意事项1.空格问题:条件测试和操作之间必须有空格,否则会导致语法错误。
例如,错误的写法是:if [ $num -gt 0]。
2.引号问题:字符串比较时,变量和字符串之间需要用引号括起来,以避免因空格或特殊字符导致的问题。
例如:if [ "$string1" ="$string2" ]。
3.逻辑运算符:可以使用逻辑运算符&&和||来实现多个条件的组合。
例如:if [ $num -lt 10 ] && [ $num -gt 5 ]。
4.退出状态码:在Shell脚本中,每个命令执行后都会返回一个退出状态码。
通常情况下,0表示成功,非0表示失败。
If-Else语句可以根据退出状态码来判断条件是否成立。
例如:if command; thenecho "成功"; else echo "失败"; fi。
