Shell脚本 (三) 条件判断 与 流程控制
个人博客网:https://wushaopei.github.io/ (你想要这里多有)
六、条件判断
1、基本语法
[ condition ](注意condition 前后要有空格)
注意:条件非空即为true,[ webcode ]返回true,[]返回false
2、常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于 (Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existene) -d 文件存在并是一个目录(directory)
3、案例实操
(1)23是否大于等于22
[root@rich datas]# [ 23 -ge 22 ]
[root@rich datas]# echo $?
0
- echo $? 返回的是0,说明上一个正确执行了
[root@rich datas]# [ 23 -le 22 ]
[root@rich datas]# echo $?
1
- echo $? 返回的非0,说明上一个执行失败了
(2)helloworld.sh 是否具有写权限
[root@rich datas]# [ -w helloworld.sh ]
[root@rich datas]# echo $?
0
(3)/home/wenmin/cls.txt 目录中的文件是否存在
[root@rich datas]# [ -e /home/wenmin/cls.txt ]
[root@rich datas]# echo $?
1
- 执行echo $? 返回不为0,说明文件不存在
[root@rich wenmin]# [ -e /home/wenmin/wenxing.txt ]
[root@rich wenmin]# echo $?
0
- 执行echo $? 返回为0,说明文件存在
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令, || 表示上一条命令执行失败后,才执行下一条命令)
[root@rich datas]# [ condition ] && echo OK || echo notok
OK
- 先执行 运算式,返回为true, 再执行 echo OK ,打印 OK ; 由于当前判断使用短路或,左边为true时,右边不执行
[root@rich datas]# [ condition ] && [ ] || echo notok
notok
- 先执行 运算式,返回为true, 再执行 [ ] ,运算式为空,返回false ; 由于当前判断使用短路或,左边为false时,右边执行打印,结果为 notok
七、流程控制(重点)
1、 if 判断
1.1 基本语法
if[ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意事项:
(1) [ 条件判断式 ],中括号和条件判断式之间必须有空格
(2) if 后要有空格
1.2 案例实操
(1) 输入一个数字,如果是1,则输出 wenminzuimei,如果是2,则输出 cls zhenmei ,如果是其他,什么也不输出。
[root@rich datas]# touch if.sh
[root@rich datas]# vim if.sh
#!/bin/bash
if [ $1 -eq 1 ];then
echo "wenmin zhen mei"
elif [ $1 -eq 2 ]
then
echo "cls zhen mei"
fi
执行shell脚本:
[root@rich datas]# bash if.sh
if.sh: 第 2 行:[: -eq: 期待一元表达式
if.sh: 第 4 行:[: -eq: 期待一元表达式
[root@rich datas]# bash if.sh 1
wenmin zhen mei
[root@rich datas]# bash if.sh 2
cls zhen mei
[root@rich datas]# bash if.sh 3
[root@rich datas]#
- 有执行结果可知,在 if 条件判断式中,需输入对应的参数,不然无法返回结果;当输入参数 1 时, 返回的是 "-eq 1 "所对应的参数;当输入参数 2 时, 返回的是 "-eq 2 "所对应的参数;当输入参数 3 时, 没有对应的 if 条件,所以没有返回值。
2、 case 语句
2.1 基本语法
case $变量名 in
“值 1”)
如果变量的值等于值1,则执行程序 1
;;
“值 2”)
如果变量的值等于值2,则执行程序2
;;
...省略其他分支......
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1) case 行尾必须为单词“in”,每一个模式匹配必须以左括号“)”结束
(2)双分号 “;;”表示命令序列结束,相当于java中的break;
(3)最后的 “*)” 表示默认模式,相当于java中的default.
2.2 案例实操
(1) 输入一个数字,如果是1,则输出wenmin,如果是2,则输出 cls ,如果是其他,输出 danlian。
[root@rich datas]# touch case.sh
[root@rich datas]# vim case.sh
#!/bin/bash
case $1 in
1)
echo "wenmin"
;;
2)
echo "cls"
;;
*)
echo "danlian"
;;
esac
执行 case.sh 脚本:
[root@rich datas]# bash case.sh 1
wenmin
[root@rich datas]# bash case.sh 2
cls
[root@rich datas]# bash case.sh 3
danlian
[root@rich datas]# bash case.sh 4
danlian
输入参数为1,返回 “wenmin”;输入参数为2,返回“cls”;输入参数为3或其他,返回“danlian”.
3、for 循环
3.1 基本语法1
for(( 初始值;循环控制条件;变量变化 ))
do
程序
done
3.2 案例实操
(1) 从1加到100
[root@rich datas]# touch for.sh
[root@rich datas]# vim for.sh
#!/bin/bash
s=0;
for((i=1;i<=100;i++))
do
s=$[$s+$i]
done
echo $s
执行 for.sh 脚本
[root@rich datas]# bash for.sh
5050
3.3 基本语法2
for 变量 in 值 1 值 2 值 3 ....
do
程序
done
3.4 案例实操
(1)打印所有输入参数
①
[root@rich datas]# touch for2.sh
[root@rich datas]# vim for2.sh
#!/bin/bash
#打印数字
for i in $*
do
echo "wenmin xihuan $i"
done
[root@rich datas]# bash for2.sh mm
wenmin xihuan mm
[root@rich datas]# bash for2.sh mm cls
wenmin xihuan mm
wenmin xihuan cls
[root@rich datas]# bash for2.sh mm cls xuewen
wenmin xihuan mm
wenmin xihuan cls
wenmin xihuan xuewen
- 将所有参数一次一个的赋予 i ,并逐个打印出来。
②
#!/bin/bash
#打印数字
for i in $*
do
echo "wenmin xihuan $i"
done
for j in $@
do
echo "wenmin xihuan $j"
done
~
[root@rich datas]# bash for2.sh mm cls xuewen shaopei
wenmin xihuan mm
wenmin xihuan cls
wenmin xihuan xuewen
wenmin xihuan shaopei
wenmin xihuan mm
wenmin xihuan cls
wenmin xihuan xuewen
wenmin xihuan shaopei
- 将所有参数一次一个的赋予 i 或 j ,并逐个打印出来。
③
#!/bin/bash
#打印数字
for i in "$*"
do
echo "wenmin xihuan $i"
done
for j in "$@"
do
echo "wenmin xihuan $j"
done
[root@rich datas]# bash for2.sh mm cls xuewen shaopei
wenmin xihuan mm cls xuewen shaopei
wenmin xihuan mm
wenmin xihuan cls
wenmin xihuan xuewen
wenmin xihuan shaopei
- “$*”将所有参数一次性赋予 i ,并一次性打印出来; “$@”将所有参数循环一次一个的赋予 j ,并逐个打印出来。
4、while 循环
4.1 基本语法
while [ 条件判断式 ]
do
程序
done
4.2 案例实操
(1) 从1 加到100
[root@rich datas]# touch while.sh
[root@rich datas]# vim while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s + $i]
i=$[$i + 1]
done
脚本中,$i 代表的是变量的值;判断语句 “ [ ] ”需要加空格,算数表达式 “ [ ] ”不需要加空格。
执行脚
[root@rich datas]# bash while.sh
5050
Shell脚本 (三) 条件判断 与 流程控制的更多相关文章
- Shell脚本IF条件判断和判断条件总结
转自:http://m.jb51.net/article/56553.htm 这篇文章主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结 ...
- [Shell]条件判断与流程控制:if, case, for, while, until
---------------------------------------------------------------------------------------------------- ...
- shell条件判断与流程控制
一 条件判断式语句 1.按文件类型进行判断 测试类型 作用 -b 文件 判断文件是否存在,并且是否为块设备文件(是块设备文件为真) -c 文件 判断文件是否存在,并且是否为字符设备文件(是字符设备设备 ...
- shell编程-条件判断与流程控制
1.条件判断式 按照文件类型进行判断: 两种判断格式: test -e /root/install.log [ -e /root/install.log ] 判断命令是否正确执行: [ -d /roo ...
- 【shell脚本语法】判断、流程控制语句
目录 判断用户参数 流程控制语句 一.判断用户参数 1.1 文件判断参数 PS:$?代表上一个命令的返回值,为0表示正确执行,非0表示错误执行.详情可参考我另一篇博客:https://www.cnbl ...
- shell(shell变量、条件表达式、流程控制)
本章内容: 变量 运算 if语句 for语句 while语句 break.continue 实例 shell变量 1.shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数 ...
- Shell脚本的条件控制和循环语句
条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expre ...
- Shell脚本的条件测试与比较
Shell脚本的条件测试与比较 一.shell脚本的条件测试 通常,在bash的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结构执行不同的操作,有时也会与if等条件语句相结合,来完成测试 ...
- linux shell中的条件判断语句
http://bbs.chinaunix.net/thread-396805-1-1.html shell 判断语句 流程控制 "if" 表达式 如果条件为真则执行then后面的部 ...
随机推荐
- Spring源码阅读 之 bean的注册
在前面我们已经学习了配置的加载,读取,解析.现在我们已经能够将一份配置转变成对应的一个个beandefinition了,我们知道Spring是一个IOC的容器,那么我们如何将这个一个个beandefi ...
- java读源码 之 list源码分析(ArrayList)---JDK1.8
java基础 之 list源码分析(ArrayList) ArrayList: 继承关系分析: public class ArrayList<E> extends AbstractList ...
- centos7启动httpd服务失败:Job for httpd.service failed because the control process exited with error code.
centos7启动httpd命令有两个可以用 service httpd start systemctl start httpd.service 如果出现如下报错 Job for httpd.s ...
- C语言进阶_分支语句
勇气是在压力之下展现出的优雅. 一.简介 C语言提供了两种分支语句可供选用,一是if.......else....类型,一种是Switch语句.两种语句都能根据条件判断结果执行不同的指令,且能进行替换 ...
- [hdu5254]BFS
题意:如果一个格子的相邻四个格子中存在两个格子被标记,且这两个格子有公共点,那么这个格子也被标记.给定初始的标记状态,求最终有多少个格子被标记了 思路: 依次对每个格子进行处理,看它能否”生成“新的被 ...
- Bootstrap:Bootstrap_table第一篇:快速用bootstrap_table(支持参数)筛选并展示数据,固定表格前几列,实现表格单元格编辑
1.准备好css和js文件 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstr ...
- C# 数据操作系列 - 7. EF Core 导航属性配置
在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑.在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等.这一篇将为大家细细分析一下,如何设 ...
- Bootstrap组件的使用
五.常用组件 总结: boot中事件,关注两件事 1.事件是如何触发的.自定义属性触发,触发方式是这个属性的值 2.事件触发的目标 button绑定目标 data-target="#id&q ...
- linux常用命令---文件拷贝与传输
拷贝命令 文件传输
- Django视图函数函数之视图装饰器
FBV模式装饰器: 普通函数的装饰器(语法糖@) views.py from django.shortcuts import render def wrapper(f): def inner(*arg ...