shell脚本中if用法
目录
- IF使用基础
- 单分支语句结构
- 双分支语句结构
- 多分支语句结构
- 条件表达式
- 文件表达式
- 数字表达式
- 字符串表达式
- && ||使用
- test与[ ]
- [ ] 与[[ ]]
IF使用基础
单分支语句结构
if [ 条件表达式 ]; then指令
fi
双分支语句结构
if [ 条件表达式 ]; then指令一
else指令二
fi
多分支语句结构
if [ -f file ]; thenecho "yes yes yes"
elif [ -z file ]; thenecho "yes yes"
elseecho "nonono"
fi
注意 if的结构为 if then else fi
从上面三个结构中可以看出,条件表达式的左右,以及[ ]的左右都要有空格。
条件表达式
文件表达式
文件属性 | |
---|---|
-a file | 如果file存在则为真 |
-b file | 如果file存在且为块文件则为真 |
c file | 如果file存在且为字符文件则为真 |
-d file | 如果file存在且是目录则为真 |
-e file | 如果file存在则为真 |
-f file | 如果file存在且为普通文件则为真 |
-g file | 如果file存在且置位设置-组ID则为真 |
-h file | 如果file存在且为符号连接则为真 |
-k file | 如果file存在且其粘性位置位则为真,参考man chmod |
-p file | 如果file存在且为命令管道(FIFO)则为真 |
-r file | 如果file存在且可读则为真 |
-s file | 如果file存在且文件长度大于0则为真 |
-t fd | 如果文件描述符fd打开且指向为终端则为真 |
-u file | 如果file存在且设置-用户-ID置位则为真 |
-w file | 如果file存在且可写则为真 |
-x file | 如果file存在且可执行 |
-G file | 如果file存在且由有效组ID拥有则为真 |
-L file | 如果file存在且为符号连接则为真 |
-N file | 如果file存在且在上次读后有修改(modified)则为真 |
-O file | 如果file存在且由有效用户ID拥有则为真 |
-S file | 如果file存在且是一个套接字则为真 |
file1 -ef file2 | 如果file1和file2指向同一个设备的inode则为真 |
file1 -nt file2 | 如果file1比file新(modified),或者file1存在file2不存在在为真 |
file1 -ot file2 | 如果file1比file旧(modified),或者file1存在file2不存在在为真 |
数字表达式
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为真
不要用=<>符号,如果要用的话
整数比较-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串表达式
字符串测试 | |
---|---|
-z string | 如果string长度为0则为真 |
-n string | 如果string长度不为0则为真 |
string1 == string2 | |
string1 = string2 | 如果string1和string2相等则为真,=只应由test使用 |
string1 != string2 | 如果字符串不相等则为真 |
string1 < string2 | 如果按字典序string1在string2之前则为真 |
string1 > string2 | 如果按字典序string1在string2之后则为真 |
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
&& ||使用
在[ ]中不能用&& ||
要用
-a 与
-o 或
! 非
如
if [ $score -ge 0 -a $score -lt 60 ];
then echo "sorry,you are lost!"
elif [ $score -ge 60 -a $score -lt 85 ];
then echo "just soso!"
elif [ $score -le 100 -a $score -ge 85 ];
then echo "good job!"
else echo "input score is wrong , the range is [0-100]!"
fi
如果一定要用&& ||则要到[[ ]]中使用。
test与[ ]
格式1:test <测试表达式>
格式2:[<条件表达式>]
格式1和格式2是等价的,test 一般在linux界面用,[ ]一般在if表达式用,如:
1、测试文件是否存在
[root@node01 ~]# test -f file&& echo 1||echo 0
0
[root@node01 ~]# touch file
[root@node01 ~]# test -f file&& echo 1||echo 0
1[root@node01 ~]# test ! -f file&& echo 1||echo 0 取反
0
2、中括号
[root@node01 ~]# [ -f file ]&& echo 1||echo 0
1
[root@node01 ~]# rm file
[root@node01 ~]# [ -f file ]&& echo 1||echo 0
0
[root@node01 ~]# [ ! -f file ]&& echo 1||echo 0
1
[ ] 与[[ ]]
[[ ]]:
这是内置在shell中的一个命令,它就比刚才说的[ ]强大的多了。支持字符串的模式匹配(使用=~操作符时甚至支持shell的正则表达 式)。简直强大的令人发指!逻辑组合可以不使用test的-a,-o而使用&&,||这样更亲切的形式(针对c、Java程序员)。
首先,尽管很相似,但是从概念上讲,二者是不同层次的东西。
“[[]]”,是关键字,许多shell(如ash bsh)并不支持这种方式。ksh, bash(据说从2.02起引入对[[的支持)等支持。
“[]”,是一条命令, 与test等价,大多数shell都支持。在现代的大多数sh实现中,"[]“与"test"是内部(builtin)命令,换句话说执行"test”/"["时不会调用/some/path/to/test这样的外部命令(如果有这样的命令的话)。
其次,[[]]结构比Bash版本的[]更通用。在[[和]]之间的所有的字符都不会被文件扩展或是标记分割,但是会有参数引用和命令替换。
用[[ … ]]结构比用[ … ]更能防止脚本里的许多逻辑错误。比如说,&&,||,<和>操作符能在一个[[]]测试里通过,但在[]结构会发生错误。
第三,[ … ]为shell命令,所以在其中的表达式应是它的命令行参数,因此串比较操作符">" 与"<“必须转义,否则就变成IO改向操作符了(请参看上面2中的例子)。在[[中”<“与”>“不需转义;
由于”[["是关键字,不会做命令行扩展,因而相对的语法就稍严格些。例如
在[ … ]中可以用引号括起操作符,因为在做命令行扩展时会去掉这些引号,而在[[ … ]]则不允许这样做。
第四,[[ … ]]进行算术扩展,而[ … ]不做。
最后,[[ … && … && … ]] 和 [ … -a … -a …] 不一样,[[ ]] 是逻辑短路操作,而 [ ] 不会进行逻辑短路
shell脚本中if用法相关推荐
- shell脚本中的$用法
shell脚本中的$用法 变量 含义 $0 shell脚本的文件名 $1 ~ $n 添加到shell脚本中的各参数: 即执行shell脚本时后跟的内容: $1为第1参数,$2为第2参数 $? shel ...
- Shell脚本中$的用法
2019独角兽企业重金招聘Python工程师标准>>> $0: 脚本名称,相对路径还是绝对路径要看调用的方式.如果是在父目录中,./dollarTest.sh调用,那么$0就是 ./ ...
- 7月11日任务 shell介绍、shell结构和执行 、date命令用法、shell脚本中的变量
2019独角兽企业重金招聘Python工程师标准>>> 20.1 Shell脚本介绍 • shell是一种脚本语言 aming_linux blog.lishiming.net ...
- 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量
2019独角兽企业重金招聘Python工程师标准>>> 1.shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断. ...
- shell shift与{}_一文掌握shell脚本中shift的用法及功能
概述 今天主要介绍下shell脚本中shift的一些用法,这个命令还是相对比较少见的. 一.shift介绍 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数 ...
- 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量...
2019独角兽企业重金招聘Python工程师标准>>> 20.1 shell脚本介绍 shell 是一种脚本语言:和传统的开发语言比较,会比较简单 shell有自己的语法:可以使用逻 ...
- shell脚本中的逻辑判断,文件目录属性判断,if特殊用法,case判断
2019独角兽企业重金招聘Python工程师标准>>> shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 格式2:if 条件; then 语句; else ...
- linux判断文件类型是否存在脚本,shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断...
一.shell脚本中的逻辑判断 在shell脚本中,很多都会逻辑判断,判断某一个数值,判断某一个文件,或者某一个目录,我们针对判断结果再做一些操作,如果没有判断,就没法做一些操作 格式1:if条件:t ...
- Linux中shift命令的用法,一文掌握shell脚本中shift的用法及功能
概述 今天主要介绍下shell脚本中shift的一些用法,这个命令还是相对比较少见的. 一.shift介绍 shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数 ...
最新文章
- 【组队学习】【27期】青少年编程(Turtle)
- LeetCode实战:回文数
- 使用DotfuscatorPro_4.9对软件dll库进行加密
- 作图像处理时常用的C/C++语句积累!
- linux多核单进程,Linux的在多核处理器3个处理(每个进程在不同的核心上运行)之间共享存储器/ SMP...
- 基于接缝裁剪的图像压缩 算法导论
- Django创建项目后,项目文件夹下的组成部分
- 把东西从学校搬回来了
- java 覆盖文件_java复制文件(如果目标文件存在,是否覆盖)
- 数学建模论文格式规范(国赛)
- Mufasa: Multimodal Fusion Architecture Search For Electronic Health Records【多模态融合架构 论文笔记】
- Markdown部分语法使用
- Markdown 语法手册 (完整整理版)
- 2014春节抢票经验记录
- 第三期:如何通过知晓云处理微信卡券消息
- 移位 display属性 内补白 外补白 Layout布局
- centos安装easy_install
- HTML5快速入门(一)—— HTML简介
- uniapp提示系统已存在更高版本
- vs2019修改代码时覆盖和插入设置
热门文章
- 系统架构设计师软考复盘
- 2022年智能车竞赛中小学国赛获奖名单
- mysql查询最小时间的一条数据_SQL 获取时间最小的一条数据
- Win32系统编程 线程控制(Suspendthread ResumeThread WaiteForSingleObject WaitForMultipleObjects)
- JVM学习记录-字符串常量池
- 最伤心的图片----你会掉泪吗?(转)
- 行测-判断推理-图形推理-样式规律-空间重构-四面体和八面体
- 高性能内存队列Disruptor
- 循环神经网络--RNN--Sequence(时间序列)
- CorelDRAW X4常用快捷键大全