Shell脚本 条件
条件测试
当需要对执行的某一条命令执行的结果状态进行判断的时候,需要进行条件测试。
使用test 条件表达式 或者 [ 条件表达式 ]
两层方括号表示模式匹配,可以用通配符
示例:[[ aa.sh == *.sh ]] && echo y || echo n
文件测试
对文件测试意思是,根据给的文件的路径(绝对路径或相对路径),判断对应的是文件还是目录,或者是文件或目录的读写执行权限。
-d 表示测试是否是目录(Directory)
-f 表示测试是否为文件(file)
-e 表示测试目录或文件是否存在(exist)
-r 表示测试当前用户是否有权限读(read)
-w 表示测试当前用户是否有权写入(write)
-x 表示测试是否可执行(execute)
整数值比较
-eq :等于
-ne :不等于
-gt :大于
-lt :小于
ge :大于等于
le :小于等于
字符串比较
= :字符串1与字符串2相同
!= :字符串1与字符串2不相同
-z :检查字符串是否为空,对于未定义或赋予空值的变量将视为空串。
-n :检查字符串是否非空,变量赋予值为非空。
逻辑测试
&& :逻辑与,表示“并且”,当前后两个测试语句都成立时,整个测试命令的返回值为0。可以用 -a
示例 [ 测试语句1 -a 测试语句2 ] 也可以用 [ 测试语句1 ] && [ 测试语句2 ]
|| :逻辑或,表示“或者”,前后两个测试语句只需要满足一个成立,返回值为0。
示例 [ 测试语句1 -o 测试语句2 ] 也可以用 [ 测试语句1 ] || [ 测试语句2 ]
! :逻辑非,表示“不”,当测试语句不成立时,返回值为0。
if语句
if语句的结构
1、单分支if
语法格式如下:
if 测试语句
then
命令序列
fi
2、双分支if
语法格式如下:
if 测试语句
then
命令序列1
else
命令序列2
fi
3、多分支if
语法格式如下
if 测试语句1
then
命令序列1
elif 测试语句2
then
命令序列2
.
. //省略部分elif
.
else
命令序列n…
fi
if分支的简单应用
[root@localhost ~]# vim hashome.sh #!/bin/bash
#判断用户有无家目录的脚本
#作者:lvbinread -p "请输入用户名:" name
cat /etc/passwd | grep ^$name
if [ $? -eq 0 ];thenif [ $name == root ];thenecho "该用户是管理员用户,家目录是$HOME"elsels /home | grep $nameif [ $? -eq 0 ];thenecho "该$name用户家目录是/home/$name"fifi
elseecho "没有此用户"
fi
case 分支
case分支介绍
case分支适用于当某个变量存在多种取值,需要对其中的每一种取值执行不同的命令序列。
case语法结构如下:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
…
*)
默认命令序列
esac
case语句的执行流程
首先使用变量值与模式1比较,若比较值相同,则执行模式1下面的命令序列1,直到遇见 “ ;; ” 后跳转到esac,表示分支结束。若与模式1不匹配,则往下匹配模式2,如相同,则执行模式2的命令序列2,直到遇见 “ ;; ” 后跳转到esac,表示分支结束,依次类推,如果都不匹配,则执行默认的 *)下面的默认命令序列。
注意事项:
1、case行尾必须为单词 in,每一个模式必须以右括号 “ ) ”结尾。
2、双分号“ ;; ”表示命令序列结束。
3、模式字符串种,可以用方括号表示一个连续的方位,例如“[0-9]”,还可以用竖杠 “|”表示或,例如“a|b”。
4、最后的 )表示默认模式,其中相当于通配符。
case的简单应用
[root@localhost ~]# vim caiquan.sh
#!/bin/bash
#猜拳小游戏
#作者:lvbin
echo "人机猜拳小游戏"
read -p "请输入剪刀、石头或布:" chose
#随机数模3取余,0代表剪刀、1代表石头、2代表布
computer=$[RANDOM%3]
case $chose in
"剪刀")if [ $computer -eq 0 ];thenecho "电脑出剪刀,平局"elif [ $computer -eq 1 ];thenecho "电脑出石头,你输了"elseecho "电脑出布,你赢了"fi
;;
"石头")if [ $computer -eq 0 ];thenecho "电脑出剪刀,你赢了"elif [ $computer -eq 1 ];thenecho "电脑出石头,平局"elseecho "电脑出布,你输了" fi
;;
"布")if [ $computer -eq 0 ];thenecho "电脑出剪刀,你输了"elif [ $computer -eq 1 ];thenecho "电脑出石头,你赢了"elseecho "电脑出布,平局"fi
;;
esac
Shell脚本 条件相关推荐
- linux中利用shell脚本条件执行linux命令
linux中利用shell脚本条件执行命令 在linux环境中,我们总会有一些命令需要经常用,例如经常跳转到某些目录下或者执行某些命令,输入一连串的命令是很烦的,此时我们可以预先写一些脚本然后根据我们 ...
- Shell脚本——条件语句
shell脚本--编程条件语句(条件测试.if语句.case分支语句) 一.条件测试 1.1 Test命令 1.2 文件测试 1.3整数值比较 1.4字符串比较 1.5逻辑测试 二.if语句 2.1 ...
- shell脚本条件测试、正整数字符串比较与if、case语句
目录 条件测试 三种测试方法 选项 比较整数数值 字符串比较 脚本中常用命令 echo命令 date命令 cal命令 tr命令 cut命令 sort命令 uniq命令 cat多行重定向 if语句 分支 ...
- BASH SHELL 脚本基础
什么是shell Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称. shell是用户和Linux内核之间的接口程序, ...
- Makefile和shell脚本调用上的一些总结
大家都知道在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的.本文试着介绍一下Makefile和shell脚本的不同. 1.在Makefile中只能在target中 ...
- bigdecimal判断等于0_Linux | shell脚本-比较判断和运算语句
一.简介 在我们写shell脚本的过程中,经常需要作比较判断,例如比较哪个数字大,判断文件是否存在,判断文件是否是目录,判断是否为真等操作.有时候我们还需要做运行,例如加减乘除等等,今天就来简单介绍比 ...
- 【 Kotlin 脚本编程Kotlin Scripting 】Linux Shell 脚本与Kotlin Scripting
Linux 英文解释为 Linux is not Unix. Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux 是一 ...
- ubuntu及shell脚本常用命令入门
一.Shell命令 二.ubuntu软件安装方法 三.Ubuntu文件系统结构 四.ubuntu磁盘文件 五.Linux下常用的压缩格式 六.linux用户和用户组 七.Ubuntu/Linux文件权 ...
- Linux shell脚本各种烧脑题编写
第一列达到100的时候 第二列数字从100向1 处理 第二列数字到50 第三列数字从100递增 第二列数字为0时不显示 第四列数字从1递增 ============================== ...
- Linux嵌入式开发——shell脚本
文章目录 Linux嵌入式开发--shell脚本 一.shell脚本基本原则 二.shell脚本语法 2.1.编写shell脚本 2.2.交互式shell脚本 2.3.shell脚本的数值计算 2.4 ...
最新文章
- Android ActionBar相关
- 前端token刷新并发处理
- SAP MM 外部采购流程里的Advanced Return Management
- pyhton列表习题
- hdu4717 三分(散点的移动)
- 【深度学习】神经网络模型特征重要性可以查看了!!!
- 面试题08(C++)
- html5伸缩效果,【HTML5】Jquery打造竖向伸缩/展开菜单
- hdu 2544 最短路
- 北师大计算机试题五答案,北京师范大学计算机软件及理论2022考研招生分析、参考书、真题等复习指导解析...
- 最后解密的两弹元勋,众帅之帅朱光亚
- 黑盒测试--等价类划分、边界值分析
- 【BZOJ1597】【Tyvj2461】土地购买,第一次的斜率优化DP
- ssis for循环容器_SSIS包中的序列容器
- HDU 6274 Master of Sequence (暴力+下整除)
- B - Vicious Keyboard
- 2017初赛普及c语言答案,NOIP2017初赛普及组C++试题
- 保姆级教程,手把手教你制作数据分析报告
- 字节跳动前端外包面试题
- 中国最美的经典古文名篇Top10,它们也是你心中的白月光吗?
热门文章
- 一大批历史精彩文章啦
- 深度学习2.0-13.神经网络与全连接层之张量实战
- pytorch 中nn.MaxPool1d() 和nn.MaxPool2d()对比;nn.functional.max_pool1d
- pytorch--nn模块(2)optim
- 书单|互联网企业面试案头书之程序员技术篇
- 揭秘React同构应用
- 《我也能做CTO之程序员职业规划》之七:大学生职业规划技巧
- 优化理论07-----拟牛顿法、拟牛顿方程、对称秩二更新公式、BFGS、DFS、Broyden族、Huang’s Family
- php phonegap,PHP数据是无休止的加载,jquery,phonegap
- r语言kendall协和系数_多变量Kendall协和系数检验.ppt