[转帖]总结:shell中的if条件判断
一、if 的基本语法
-
if [ command ];then
-
xxx
-
elif [ command ];then
-
xxx
-
else
-
xxx
-
fi
二、常见的一些写法案例
1、if [ "x${var}" = "x" ]
其实就是判断${var}是否为空的意思
2、if [ X"$?" == X"0" ]
其实就是判断$?是否为0,即判断执行结果是否正确
3、 if [ ! -x "$PRGDIR"/ "$EXECUTABLE" ]; then #!是非条件,即非(-x "$PRGDIR"/ "$EXECUTABLE")是否为真。总体含义是 判断脚本catalina.sh是否存在并有可执行权限,没有执行权限就退出。
4、[ -z "$CATALINA_HOME" ]: -z 在中括号中判断字符串变量的值是否为空,为空则为真。
5、-d filename:如果 filename为目录,则为真,作用比如判断目录是否存在
如下,判断run_dir目录是否存在:

三、文件和目录的判断
-
------------------------- 常用的-----------------------------------------------
-
[ -e file ] 如果 file 存在,则为真。
-
[ -d DIR ] 如果 file 存在且是一个目录,则为真。
-
[ -f file ] 如果 file 存在且是一个普通文件,则为真。
-
-
[ -r file ] 如果 file 存在且是可读的,则为真。
-
[ -w file ] 如果 file 存在且是可写的,则为真。
-
[ -x file ] 如果 file 存在且是可执行的,则为真。
-
-
[ -s file ] 如果 file 存在且大小不为0,则为真。
-
[ -L file ] 如果 file 存在且是一个符号连接,则为真。
-
[ -h file ] 如果 file 存在且文件是软链接,则为真。
-
[ file1 -ot file2 ] 如果 file1 比 file2 要老, 或者 file2 存在且 file1 不存在,则为真。
-
[ file1 -nt file2 ] 如果 file1 比 file2 要新,则为真。
-
-
------------------------- 以下不太常用 --------------------------------------------
-
-
[ -b file ] 如果 file 存在且是一个块特殊文件,则为真。
-
[ -c file ] 如果 file 存在且是一个字特殊文件,则为真。
-
-
[ -g file ] 如果 file 存在且已经设置了SGID,则为真。
-
[ -k file ] 如果 file 存在且已经设置了粘制位,则为真。
-
[ -p file ] 如果 file 存在且是一个名字管道(F如果O),则为真。
-
-
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端,则为真。
-
[ -u file ] 如果 file 存在且设置了SUID (set user ID),则为真。
-
-
[ -O file ] 如果 file 存在且属有效用户ID,则为真。
-
[ -G file ] 如果 file 存在且属有效用户组,则为真。
-
[ -N file ] 如果 file 存在 and has been mod,如果ied since it was last read则为真。
-
[ -S file ] 如果 file 存在且是一个套接字,则为真。
-
[ file1 -ef file2 ] 如果 file1 和 file2 指向相同的设备和节点号,则为真。
四、字符串的判断
字符串批较时,变量一定要用 双引号。
-
[ -z "str" ] 如果str的长度为零,则为真 ,即判断是否为空,空即是真;
-
[ -n "str" ] 如果str的长度非零,则为真 ,即判断是否为非空,非空即是真;
-
[ "str1" = "str2" ] 如果两个字符串相同,则为真;
-
[ "str1" != "str2" ] 如果字符串不相同,则为真;
-
[ "str1" ] 如果字符串不为空,则为真,与-n类似。
案例:
-
if [ -z "$path" ]; then
-
echo "path不能为空,请指定path"
-
fi
-
-
if [ "$opt" != "-" ]&&[ "$opt" != "+" ]; then
-
echo "opt只能取值-或+" 1>&2
-
exit 1;
-
fi
五、数值比较
数值的比较千万不要使用大于号、小于号,数值的比较只能使用 -eq 、-gt 等。
-
[ num1 -eq num2 ] num1 和 num2 两数相等为真 , =
-
[ num1 -ne num2 ] num1 和 num2 两数不等为真 ,!=
-
[ num1 -gt num2 ] num1 大于 num1 为真 , >
-
[ num1 -ge num2 ] num1 大于等于num2 为真, >=
-
[ num1 -lt num2 ] num1 小于n um2 为真 , <
-
[ num1 -le num2 ] num1 小于等于 num2 为真, <=
案例:
-
if [ ${num1} -gt ${num2} ]; then
-
echo "[相对目录]的长度应该小于[文件路径]的长度"
-
exit 1
-
fi
[转帖]总结:shell中的if条件判断的更多相关文章
- linux Shell中常用的条件判断
linux Shell中常用的条件判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d ...
- bash Shell 中如何实现条件判断之if判断
http://blog.51cto.com/lovelace/1211353 bash中如何实现条件判断?条件测试类型: 整数测试 字符测试 文件测试 一.条件测试的表达式: ...
- shell编程学习笔记(八):Shell中的if条件判断
编程语言中都有条件判断,shell编程也不例外,下面我们来看一下shell中应该怎么使用if条件判断 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts ...
- shell编程学习笔记(九):Shell中的case条件判断
除了可以使用if条件判断,还可以使用case 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script08.sh 开始编写scrip ...
- shell中的常用条件判断
-e :该“文件名”是否存在.exit-d :该文件名是否为目录.dir-f :该文件名是否为普通文件.file -b:该文件是否为块文件.block -r :该文件是否具有可读属性 read-w ...
- Shell中[]里面的条件判断
1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真 str1 != str2 当串str1和str2不等时为真 -n str1 当串的长度大于0时为真(串非空) -z str1 当 ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
- [转帖]Linux shell中2>&1的含义解释 (全网最全,看完就懂)
Linux shell中2>&1的含义解释 (全网最全,看完就懂) https://blog.csdn.net/zhaominpro/article/details/82630528 ...
- shell编程基础(3)条件判断语句
1,带参数的shellscript #this is program build 5.11 to test shell script ############ cxz ####### 5.11 ### ...
随机推荐
- Programming abstractions in C阅读笔记:p181-p183
<Programming Abstractions In C>学习第61天,p181-p183总结. 一.技术总结 1.linear search algorithm 2.lexicogr ...
- gmap构建离线地图,用createCustomerTiledLayer方法,瓦片地址尾部多了 ?x={x}&y={y}&z&{z} 导致无法显示地图。
gmap构建离线地图,用createCustomerTiledLayer方法,瓦片地址尾部多了 ?x={x}&y={y}&z&{z} 导致无法显示地图. function in ...
- PyTorch项目源码学习(3)——Module类初步学习
torch.nn.Module Module类是用户使用torch来自定义网络模型的基础,Module的设计要求包括低耦合性,高模块化等等.一般来说,计算图上所有的子图都可以是Module的子类,包括 ...
- flutter中显示年月日、星期与时间
代码 import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'dart:async'; imp ...
- three.js中场景模糊、纹理失真的问题
目录 1. 概述 2. 方案 2.1. 开启反走样 2.2. 开启HiDPI设置 3. 结果 4. 参考 1. 概述 在three.js场景中,有时会遇到场景模糊,纹理失真的现象,似乎three.js ...
- Web 全栈开发利器: 强大的在线 Cloud IDE
摘要:近年来,敏捷.DevOps的理念已逐步成为主流.基于云计算的开发环境也正获得越来越多开发者的青睐.不难想象,云端IDE已成未来的趋势. 学了Web全栈开发,就得动手实践,要动手,得先有开发环境. ...
- 技术实操丨SoundNet迁移学习之由声音分类到语音情感识别
摘要:声音也是识别对象的一种重要数据源.其中根据声音来识别声音所处的环境也是语音识别的研究内容之一. 一.思路 1.SoundNet模型在视频数据中先预训练,视频任务可能是场景识别,可参考这篇文章So ...
- 云图说|移动应用安全服务—App的体检中心,全面检测,安全上路!
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 移动应用安全服务 ...
- 火山引擎 EMR StarRocks 场景案例分享
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 日前 ,火山引擎数智平台(VeDI)旗下产品 E-MapReduce(简称"EMR")正式上线 ...
- Solon2 开发之IoC,七、切面与函数环绕拦截
想要环绕拦截一个 Bean 的函数.需要三个前置条件: 通过注解做为"切点",进行拦截(不能无缘无故给拦了吧?费性能) Bean 的 method 是被代理的 在 Bean 被扫描 ...