14Shell脚本—判断语句
判断语句
Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。
条件测试语法的执行格式为 [ 条件表达式 ],切记,条件表达式两边均应有一个空格。
条件表达式也可以使用 “test 条件表达式” 格式来使用。
条件测试语句可以分为4种:文件测试语句、逻辑测试语句、整数值比较语句、字符串比较语句
1. 文件测试语句
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
使用测试语句判断testdir是否为一个目录类型的文件,然后通过Shell解释器的内设¥?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;如果返回值为非零的值,则目录不存在。
#测试语句与$?搭配使用
[root@rockman 0615]# ls -l
total 4
-rw-r--r--. 1 root root 140 Jun 15 16:43 example.sh
drwxr-xr-x. 2 root root 6 Jun 15 17:10 testdir
[root@rockman 0615]# [ -d testdir ]
[root@rockman 0615]# echo $?
#成功返回0
0
[root@rockman 0615]# test -d testdir
[root@rockman 0615]# echo $?
#成功返回0
0
2. 逻辑测试语句
逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。
2.1 Shell中的逻辑“与” &&
表示当前面的命令执行成功后才会执行它后面的命令。
#如果testdir存在,则打印Exist
[root@rockman 0615]# [ -e testdir ] && echo "Exist"
Exist
2.2 Shell中的逻辑“或” ||
表示当前面的命令执行失败才会执行它后面的名令。
#如果testdir01不存在,则打印Not Exist
[root@rockman 0615]# [ -e testdir01 ] || echo "Not Exist"
Not Exist
2.3 Shell中的逻辑“非” !
它表示把条件测试 中的判断结果取相反值。
#如果[ ! $USER = root ]执行失败,则答应administrator
[root@rockman 0615]# [ ! $USER = root ] || echo "administrator"
administrator
2.4 逻辑语句的综合示例
#先判断当前登录用户的USER变量名称是否等于root,然后用“!”取反,效果就变成了判断当前用户是否不是root
#如果条件成立(即不是root用户),则会根据逻辑“与”运算符输出user字样
#如果条件不成立(即是root用户),则前面的[ ! $USER = root ] && echo "user"语句执行失败,此时便会执行"||"后面的语句,输出root字样
[root@rockman 0619]# [ ! $USER = root ] && echo "user" || echo "root"
root
3. 整数值比较语句
整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然地使用日常生活张工的等号、大于号、小于号来判断。
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于
[root@rockman 0619]# [ 10 -eq 10 ]
[root@rockman 0619]# echo $?
#成功返回0
0
[root@rockman 0619]# [ 10 -ne 10 ]
[root@rockman 0619]# echo $?
#失败返回非零
1
4. 字符串比较
字符串比较语句用于判断测试字符串是否为空值,或者两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值)。
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空
[root@rockman 0619]# [ -z $String ]
[root@rockman 0619]# echo $?
#成功返回零,则String为空,未定义
0
[root@rockman 0619]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US
14Shell脚本—判断语句的更多相关文章
- shell脚本判断语句和循环语句
if判断语句 exit跳出判读语句 不加exit的结果 read -n(不换行) 判断是否输入的是数字 read age[[ $age =~ ^[0-9]+$ ]]if [ $? -ne 0 ]; t ...
- shell脚本if判断语句报错[: too many arguments的两种原因
shell脚本,if判断语句报错[: too many arguments 我遇到过两种情况: 1.第一中情况就是网上大家说的,字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断 ...
- shell脚本的if判断语句
if条件判断语句 if (表达式) #if ( Variable in Array ) 语句1 else 语句2 fi 1.测试数字大小 #!/bin/sh NUM=100 if (( $NUM &g ...
- shell 脚本——判断条件
在之前的shell语言学习笔记中已经写过shell的几种判断语句及循环语句,也简单的介绍了shell语言判断语句和判断条件.在此再做进一步学习. test命令的测试功能 test命令用于检测系统文件及 ...
- python基础 数据类型 判断语句
python 类unix系统默认已经安装或使用源码包./confighuremakemake install python运行方法 通过交互式解释器 [root@room1pc01 ~]# pytho ...
- C#开发Unity游戏教程之判断语句
C#开发Unity游戏教程之判断语句 游戏执行路径的选择——判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏 ...
- linux条件测试操作(test)和if判断语句,while循环语句,break控制语句和for循环和case多分枝语句和select语句
条件测试操作 条件测试是专为影响"$?"的操作,是条件转移.循环语句的基础 test测试命令: test 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0, ...
- 判断语句 、 while循环 、 for循环
判断语句 语法结构 if 条件1: 如果条件1为真,执行语句块 elif 条件2: 如果条件2为真,执行语句块 elif 条件3: 如果条件2为真,执行语句块 elif 条件n: 如果条件n为真,执行 ...
- linux shell中的条件判断语句
http://bbs.chinaunix.net/thread-396805-1-1.html shell 判断语句 流程控制 "if" 表达式 如果条件为真则执行then后面的部 ...
随机推荐
- WEB安全字体(Web Safe Fonts)-网页设计用什么字体兼容性好?
效果:http://sandbox.runjs.cn/show/qgdljvh4 1 Arial微软公司的网页核心字体之一,最常用的sans serif字体,当字号很小时不容易阅读.但是,大写的“I” ...
- BZOJ3622(容斥+dp)
思路 "恰k个"考虑求至少k.k+1--个容斥 题面说所有数字都不同,可以将所求转化为糖比药多的组数恰为\((n+k)/2\)的方案数 \(f[i][j]\)数组我觉得更好的理解方 ...
- CodeForces - 1005A-Tanya and Stairways(模拟)
Little girl Tanya climbs the stairs inside a multi-storey building. Every time Tanya climbs a stairw ...
- AtCoder Regular Contest 082 ABCD
A #include<bits/stdc++.h> using namespace std; ]; int n,m; int main(){ cin>>n>>m; ...
- dot watch
dot watch+vs code提升asp.net core开发效率 在园子中,已经又前辈介绍过dotnet watch的用法,但是是基于asp.net core 1.0的较老版本来讲解的,在asp ...
- TVS选型
与保护器件并联使用的电压型保护器件,速度快,冲击脉冲功率高.正常高阻抗,超过击穿电压后导通将两端电压钳位在VC(即被保护的电压级别) 命名规则SMAJ/BJ/CJ/DJ分别表示不同的脉冲功率为400W ...
- Mysql一个表编码的坑,mark一下
问题:一个sql执行很慢,5分钟左右,关键是最大的表是5万出头,另一张表不到5000原因:是两个表的字符集不同,导致匹配时,没有匹配到 解决办法:将两个表的字符集改成一样具体的命令: ALTER TA ...
- 关闭mysql validate-password插件
mysql5.7 的validate-password对密码策略有限制,比如长度大小写,太麻烦,我习惯开发环境下为root,所以在开发环境关闭这个插件的话只需在/etc/my.cnf中添加valida ...
- Access denied for user ''@'localhost' (using password: NO)之idea坑~
idea启动sql连接远程数据库时发生错误: 发现是sql连接配置问题: spring: datasource: data-username: root data-password: 123456 u ...
- 【转】HTTPS系列干货(一):HTTPS 原理详解
HTTPS系列干货(一):HTTPS 原理详解 前言 HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并 ...