Shell中条件判断语法与判断条件

一,简介

Shell各种判断结构和运算符的用法是shell编程的基础,了解shell的判断、运算符和一些退出状态

对后面的学习有很重要的影响。shell有一个内部命令test经常用于对判断语句

进行测试一种或几种状态的条件是否成立

二. 判断条件

(1)Linux的shell中的测试命令,用于测试某种条件或某几种条件是否真实存在

测试命令是判断语句和循环语句中条件测试的工具,对判断和运算符的比较测试有很大的帮助。

(2)测试条件为真,返回一个0值;      为假,返回一个非0整数值

测试命令有两种方式,一种test expression(表达式);另一种命令格式[ expression ]

其中”[“是启动测试命令,”]”要与之配对,而且”[“和”]”前后的空格必不可少

此方式常作为流程控制语句的判断条件

2.1 字符串判断 
  
str1 = str2      当两个串有相同内容、长度时为真 
str1 != str2       当串str1和str2不等时为真 
-n str1        当串的长度大于0时为真(串非空) 
-z str1        当串的长度为0时为真(空串)

这个地方有必要举个小例子,我们编程的时候经常做一些使用喜欢使用空格表示空

但shell中空格会被判断成一个字符,比如:

[  -n  ” ” ]  这个值echo $?会返回0,说明字符串不为空。
[  -z  ”  ” ] 这个值echo $?会返回非空,说明里边不是空。
  
2.2 数字的判断 
  
int1 -eq int2    两数相等为真 
int1 -ne int2    两数不等为真 
int1 -gt int2    int1大于int2为真 
int1 -ge int2      int1大于等于int2为真 
int1 -lt int2     int1小于int2为真 
int1 -le int2       int1小于等于int2为真 
  
2.3 文件的判断 
  
-e file                                                    若文件存在,则为真 
-d file                                                    若文件存在且是一个目录,则为真
-b file                                                    若文件存在且是一个块特殊文件,则为真
-c file            若文件存在且是一个字符特殊文件,则为真
-f file            若文件存在且是一个规则文件,则为真
-g file            若文件存在且设置了SGID位的值,则为真
-h file            若文件存在且为一个符合链接,则为真
-k file            若文件存在且设置了“sticky”位的值
-p file            若文件存在且为一已命名管道,则为真
-r file            若文件存在且可读,则为真
-s file            若文件存在且其大小大于零,则为真
-u file            若文件存在且设置了SUID位,则为真
-w file            若文件存在且可写,则为真
-x file            若文件存在且可执行,则为真
-o file            若文件存在且被有效用户ID所拥有,则为真 
  
2.4 逻辑判断 
  
!expr                                                      若expr为假则复合表达式为真,expr可以是任何有效的测试表达式
expr1 -a expr2         若expr1和expr2都为真则整式为真
expr1 -o expr2         若expr1和expr2有一个为真则整式为真  
  
补充: 系统变量 
  
$n                 该变量与脚本被激活时所带的参数相对应

.n是正整数,与参数位置相对应($1,$2…) 
$?                                                                    前一个命令执行后的退出状态
$#                 提供脚本的参数号
$*                 所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2 
$0                 正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
[email protected]                 所有这些参数都分别被双引号引住。若一个脚本接收到两个参数,[email protected]等价于$1$2
$$                 当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
$!                 前一个后台命令的进程号

3、退出状态

(1)Linux系统,每当命令执行完成后,系统返回一个退出状态。若退出状态值为0,表示命令运行成功;反之若退出状态值不为0,则表示命令运行失败。最后一次执行命令的退出状态值被保存在内置变量”$?”中。

(2)exit命令格式:exit status(status在0~255之间),返回该状态值时伴随脚本的退出,参数被保存在shell变量$?中。

三、总结

(1)shell的各种运算符是编程的重要环节。IF和CASE条件判断结构的应用,使问题有了多分支的选择。

(2)本文仅简单的介绍重要的基础知识,若要熟练使用,还需要大量的练习。

时间: 2024-12-26 05:39:36

Shell中条件判断语法与判断条件的相关文章

shell中的逻辑判断,if 判断文件、目录属性,if判断的一些特殊用法

shell中的逻辑判断 格式1:if 条件 ; then 语句; fi //如果满足条件,然后执行语句 [[email protected] shell]# cat if1.sh #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi [[email protected] shell]# sh -x if1.sh + a=5 + '[' 5 -gt 3 ']' + echo ok ok 格式2:if 条件; then 语句; else 语句; fi //如

shell中数组基础语法

数组的基本赋值 arr=(a b c) arr[index]=a 2.常用的两个方法 str=${arr[@]}(数组转化成字符串) len=${#arr[*]}(数组长度) 3.遍历数组的方法 #!/bin/bash arr=(a b c def vivi) i=0 len=${#arr[*]} while [ $i -lt $len ] do echo ${arr[$i]} done for((i=0;i<$len;i=$i+1)) do echo ${arr[$i]} done #!/bi

(九)shell中case语句、程序传参、while

2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中的switch case不同.shell中的case默认就是匹配上哪个执行哪个,不会说执行完了还去执行后面的其他case(就好像shell中的case语言默认都带了break). 2.2.6.2.调用shell程序的传参(1)C语言中可以通过main函数的argc和argv给程序传参(详情参考<4.

shell中的环境变量:local,global,export

 1.local一般用于局部变量声明,多在在函数内部使用.实例如下:      echo_start() { local STR="$1" echo "...... ${STR} ......starting at $(date)" } 2.Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止. 3.export 将自定义变量设定为系统环境变量(仅限于该次登陆操作,当前shell中有效)    语法:expo

shell中的变量及shell条件判断

Shell 基础之变量和条件判断 一.shell概述 1.shell概述: shell是一个命令行的解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统及程序,用户可以用shell来启动.挂起.停止甚至编写一些程序,shell还是一个功能强大的编程语言,shell是解释性的脚本语言,在shell中可以直接调用Linux命令. 2.shell脚本的用途 (1)自动化常用的命令 (2)执行系统管理和故障排除 (3)执行简单的应用程序 (4)处理文本或文件 3.shell的分类 (1

shell中if判断条件中使用[],[[]],(())还是test,let的比较

学习shell的时候总是被shell里的条件判断方式搞得头疼,经常不知道改 用[],[[]],(())还是test,let,而很少有书把它们的关系讲解的很清楚(应该是我悟性差或是看书太少),今天总结一下,基础的东西如它们 的使用方法不再赘述,重点说说它们的区别的使用时应该注意的地方. 先说[]和test,两者是一样的,在命令行里test expr和[ expr ]的效果相同.test的三个基本作用是判断文件.判断字符串.判断整数.支持使用与或非将表达式连接起来.要注意的有: 1.test中可用的

shell中条件判断文件, 判断数值, 判断字符; 逻辑比较, test的使用

shell中的条件判断: (选项参考man test) 1. 文件判断: 判断目录存在不存在: test -d /home 执行后使用$?查看结果为0, 表示是目录; test命令无论执行结果如何, 都不会报错, 只会返回0或非0 test -d /home 语法等同于 [ -d /home ] test可使用[来代替, 后面的]只不过是一个参数, 不要把这个当作方括号看待, 人家是个命令啊. 2. 数值判断: if [ $UID -ne 0 ]; then $UID用户判断当前用户是否是roo

Bourne Shell中的条件判断

条件判断是一个程序获得智能的基础,而Bourne Shell脚本则通过命令 [ 来模拟大多数编程语言中的条件表达式. shell中支持的控制结构有: (1) if then else fi (2) for in do done (3) while do done 第二种主要用于遍历,可能不需要条件判断,其它两种则免不了和 [ 命令共同使用了.下面讲解这个命令如何模拟条件表达式. 文件/目录判断[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真.[ -c FILE ] 如果 FI

shell中条件判断if中的-z到-d的意思

shell中条件判断if中的-z到-d的意思 [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真. [ -d FILE ] 如果 FILE 存在且是一个目录则为真. [ -e FILE ] 如果 FILE 存在则为真. [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真. [ -g FILE ] 如果 FILE 存在且已经设置了SGID则