个人博客网: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脚本 (三) 条件判断 与 流程控制的更多相关文章

  1. Shell脚本IF条件判断和判断条件总结

    转自:http://m.jb51.net/article/56553.htm 这篇文章主要介绍了Shell脚本IF条件判断和判断条件总结,本文先是给出了IF条件判断的语法,然后给出了常用的判断条件总结 ...

  2. [Shell]条件判断与流程控制:if, case, for, while, until

    ---------------------------------------------------------------------------------------------------- ...

  3. shell条件判断与流程控制

    一 条件判断式语句 1.按文件类型进行判断 测试类型 作用 -b 文件 判断文件是否存在,并且是否为块设备文件(是块设备文件为真) -c 文件 判断文件是否存在,并且是否为字符设备文件(是字符设备设备 ...

  4. shell编程-条件判断与流程控制

    1.条件判断式 按照文件类型进行判断: 两种判断格式: test -e /root/install.log [ -e /root/install.log ] 判断命令是否正确执行: [ -d /roo ...

  5. 【shell脚本语法】判断、流程控制语句

    目录 判断用户参数 流程控制语句 一.判断用户参数 1.1 文件判断参数 PS:$?代表上一个命令的返回值,为0表示正确执行,非0表示错误执行.详情可参考我另一篇博客:https://www.cnbl ...

  6. shell(shell变量、条件表达式、流程控制)

    本章内容: 变量 运算 if语句 for语句 while语句 break.continue 实例 shell变量 1.shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数 ...

  7. Shell脚本的条件控制和循环语句

    条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expre ...

  8. Shell脚本的条件测试与比较

    Shell脚本的条件测试与比较 一.shell脚本的条件测试 通常,在bash的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结构执行不同的操作,有时也会与if等条件语句相结合,来完成测试 ...

  9. linux shell中的条件判断语句

    http://bbs.chinaunix.net/thread-396805-1-1.html shell 判断语句 流程控制 "if" 表达式 如果条件为真则执行then后面的部 ...

随机推荐

  1. mac下使用xampp中php显示1044/1045/1046(卸载xampp)

    问题描述 在mac下使用xampp,访问http://192.168.64.3/phpmyadmin/可以正常显示php页面,当创建数据库时提示1044也就是普通用户没有权限 问题猜测 猜测在使用xa ...

  2. 李婷华 201771010113 《面向对象程序设计(java)》 第三周学习总结

    第一部分:理论知识回顾 第一章 再次了解了java“白皮书”的关键术语,java的常见术语,对于“白皮书”的关键术语依然环游不太理解的. 第二章 在使用命令行工具运行java程序的过程中,依然会有环境 ...

  3. Android中限制输入框最大输入长度

    通常情况下只需要在布局文件中加入maxlength这一属性即可 <EditText android:inputType="text" android:singleLine=& ...

  4. 【Hadoop离线基础总结】关键路径转化率分析(漏斗模型)

    关键路径转化 需求 在一条指定的业务流程中,各个步骤的完成人数及相对上一个步骤的百分比 模型设计 定义好业务流程中的页面标识 Step1. /item Step2. /category Step3. ...

  5. 字节码编程,Byte-buddy篇一《基于Byte Buddy语法创建的第一个HelloWorld》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相对于小傅哥之前编写的字节码编程: ASM.Javassist 系列,Byte Bu ...

  6. 超简单笔记本改造nas--一个萌新的摸爬滚打

    最近好久没更新,你们有没有想我啊(手动滑稽)咳咳,言归正传,如同标题,最近闲来无事,打算利用家里的闲置笔记本电脑搭建一个nas.**注意:本文不涉及群晖以及相关专业NAS服务供应商!!!**nas分两 ...

  7. Queue-PriorityQueue源码解析

    Queue队列通常是先进先出(FIFO),但也有特殊的非FIFO,如本文也分析的PriorityQueue. Queue接口 Queue接口定义的方法: 添加元素接口: add(E e) -> ...

  8. 简单的Java实现Netty进行通信

    使用Java搭建一个简单的Netty通信例子 看过dubbo源码的同学应该都清楚,使用dubbo协议的底层通信是使用的netty进行交互,而最近看了dubbo的Netty部分后,自己写了个简单的Net ...

  9. JPA 分页处理

    1.要实现jpa分页管理首先得要正确配置jpa环境,在spring环境中的配置如下: 开启注解功能 <bean class="org.springframework.orm.jpa.s ...

  10. 10 分离式web框架

    10 分离式web框架 wsgiref模块: 将http请求封装成以键值对的形式封装成字典environ: "PATH_INFO"对应的值为请求文件路径, “QUERY_STRIN ...