目录

一、判断用户参数

1.1 文件判断参数

PS:$?代表上一个命令的返回值,为0表示正确执行,非0表示错误执行。详情可参考我另一篇博客:https://www.cnblogs.com/HeiDi-BoKe/p/11635473.html

补充:逻辑语句有三个(与:&&,或:||,非:!)

实例:

1.2 比较运算符

实例:

  1. # FreeMem=`free -m | grep Mem: | awk '{print $4}`
  2. # echo $FreeMem

1.3 字符串比较符

实例:

二、流程控制语句

  下面介绍if、for、while、case这4中流程控制语句

2.1 if条件判断语句

  if语句分为单分支,双分支,多分支

2.1.1 if单分支语句

  单分支语句结构由if、then、fi关键词组成,只在条件成立才执行预设的语句。即如果...那么...

语法:

  1. if 条件表达式;then
  2. 命令
  3. fi

实例:

  1. # vi ifDemo.sh
  2. #!/bin/bash
  3. DIR=/tmp/test/
  4. if [ ! -e $DIR ];then
  5. echo "$DIR 目录不存在"
  6. mkdir -p /tmp/test
  7. fi
  8. echo "$DIR 目录已存在"

2.1.2 if双分支语句

  双分支语句结构由if、then、else、fi关键词组成,判断第一次的条件,如果匹配则执行,如果不匹配则执行else后面的命令。即如果...那么...或者...那么...

语法:

  1. if 条件表达式;then
  2. 命令1
  3. else
  4. 命令2
  5. fi

实例:

  1. # 验证某台主机是否在线(这里使用从参数读取ip和直接写脚本中)
  2. # ping -c 指定次数,-i指定每个数据发送的间隔 -W指定等待时间
  3. # 方法一:从参数读取ip
  4. # vi ifelseDemo.sh
  5. #!/bin/bash
  6. if [ $# -eq 0 ];then
  7. echo "[usage] 请使用./ifelseDemo.sh ip地址"
  8. exit 0
  9. fi
  10. ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
  11. if [ $? -eq 0 ];then
  12. echo "$1 是通的"
  13. else
  14. echo "$1 是不通的"
  15. fi
  16.  
  17. #方法二:将ip直接写脚本里
  18. # vi ifelseDemo2.sh
  19. #!/bin/bash
  20. if `ping -c 3 106.53.73.200 &> /dev/null`;then
  21. echo "通的"
  22. else
  23. echo "不通"
  24. fi

2.1.3 if多分支语句

  多分支语句结构由if、then、else、elif、fi关键词组成,进行多次条件匹配,匹配成功则执行对应的预设语句。即如果...那么..如果...那么...

语法:

  1. if 条件语句1;then
  2. 命令1
  3. elif 条件语句2;then
  4. 命令2
  5. ...
  6. else
  7. 命令
  8. fi

实例:

  1. # vi grade.sh
  2. #!/bin/bash
  3. read -p "请输入你的成绩(0-100): " GRADE
  4. if [ $GRADE -gt 100 ] || [ $GRADE -lt 0 ];then
  5. echo "[info] 您输入的成绩无效,请输入(0-100)之间包括0和100的数"
  6. elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ];then
  7. echo "$GRADE is Execllent"
  8. elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ];then
  9. echo "$GRADE is Pass"
  10. else
  11. echo "$GRADE is Fail"
  12. fi

2.2 for循环语句

  for语句能一次读取多个信息,然后逐一对信息进行操作处理

语法:

  1. 语法一:
    for 变量名 in 取值列表
  2. do
  3. 命令
  4. done
    语法二:
    for ((expr1expr2;expr3));do 命令列表 done 

实例:

  1. # 提前准备好用户的文件
  2. [root@VM_0_10_centos shellScript]# vi username.txt
  3. test01
  4. test02
  5. test03
  6. test04
  7. test05
  8. test06
  9. # vi example.sh
  10. #!/bin/bash
  11. read -p "请输入用户密码:" PASSWD
  12. for UNAME in `cat username.txt`
  13. do
  14. id $UNAME &> /dev/null
  15. if [ $? -eq 0 ]
  16. then
  17. echo "$UNAME user is exists"
  18. else
  19. useradd $UNAME &> /dev/null
  20. echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
  21. if [ $? -eq 0 ]
  22. then
  23. echo "$UNAME,Create success"
  24. else
  25. echo "$UNAME,Create failure"
  26. fi
  27. fi
  28. done
  1. # 大于数字1小于数字10
  2. # cat for.sh
  3. #!/bin/bash
  4. for ((i=1;i<10;i++))
  5. do
  6. echo $i
  7. done
  8. # 结果
  9. # ./for.sh
  10. 1
  11. 2
  12. 3
  13. 4
  14. 5
  15. 6
  16. 7
  17. 8
  18. 9
  1. # 检查多个主机是否存活
  2. # cat ip.sh
  3. #!/bin/bash
  4. for IP in 106.53.73.200 182.254.184.102
  5. do
  6. if `ping -c 2 $IP &> /dev/null`
  7. then
  8. echo -e "$IP OK"
  9. else
  10. echo "$IP NO"
  11. fi
  12. done
  13. # 结果
  14. # ./ip.sh
  15. 106.53.73.200 OK
  16. 182.254.184.102 OK
  1. # 检查多个域名是否可以访问
  2. # cat http.sh
  3. #!/bin/bash
  4. URL="www.tourby.com www.baidu.com"
  5. for i in $URL
  6. do
  7. HTTP=`curl -i -m 10 -o /dev/null -s -w %{http_code}"\n" http://$i`
  8. if [ $HTTP -eq 200 -o $HTTP -eq 301 ]
  9. then
  10. echo "$i OK"
  11. else
  12. echo "$i NO"
  13. fi
  14. done
  15. # 结果
  16. # ./http.sh
  17. www.tourby.com NO
  18. www.baidu.com OK

2.3 while语句

  while语句通过判断条件的真假来决定是否执行命令。条件为真则执行,为假则结束循环。当表达式为true时,会变成死循环

语法:

  1. while 条件
  2. do
  3. 命令
  4. done

补充:

1)break:终止循环

2)continue:跳出当前循环,执行下一个循环

2.4 case条件语句

  用于选择性的执行对应的命令

语法:

  1. case 模块名 in
  2. 模式1
  3. 命令;;
  4. 模式2
  5. 命令;;
  6. ...
  7. *)
  8. 命令
  9. esac

实例:

  1. # cat case.sh
  2. #!/bin/bash
  3. read -p "请输入任意字符,并按Enter键确认:" KEY
  4. case $KEY in
  5. [a-z][A-Z])
  6. echo "您输入是字母。"
  7. ;;
  8. [0-9])
  9. echo "您输入是数字。"
  10. ;;
  11. *)
  12. echo "您输入是空格,下划线,功能键或其他"
  13. esac

【shell脚本语法】判断、流程控制语句的更多相关文章

  1. Shell脚本语法---在Makefile等文件…

    1. Shell脚本语法 1.1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Sta ...

  2. shell脚本语法基础汇总

    shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...

  3. 基础语法-其它流程控制语句break和continue

    基础语法-其它流程控制语句break和continue 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.break语句 /** * break语句 * @author 尹正杰 * ...

  4. Shell脚本中判断输入参数个数的方法投稿:junjie 字体:[增加 减小] 类型:转载

    Shell脚本中判断输入参数个数的方法 投稿:junjie 字体:[增加 减小] 类型:转载   这篇文章主要介绍了Shell脚本中判断输入参数个数的方法,使用内置变量$#即可实现判断输入了多少个参数 ...

  5. U-Boot shell脚本语法

    /********************************************************************** * U-Boot shell脚本语法 * 说明: * 之 ...

  6. shell脚本中判断上一个命令是否执行成功

    shell脚本中判断上一个命令是否执行成功 shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功. 示例 ...

  7. shell脚本实现监控shell脚本的执行流程及变量的值

    这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...

  8. [shell]上一个命令执行完成,才执行下一个操作 | shell脚本中判断上一个命令是否执行成功

    shell脚本中判断上一个命令是否执行成功  shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功. 场 ...

  9. Shell脚本中判断输入变量或者参数是否为空的方法

    shell判断一个变量是否为空方法总结 https://www.jb51.net/article/154835.htm 1.判断变量 复制代码代码如下: read -p "input a w ...

随机推荐

  1. Oracle解析逗号分隔的字符串,或者01110110101此类数据

    -- 1.提取此类数据中的1的索引位置,从1开始    例: 0001100001100 --> 4,5,10,11 create or replace function hazq_instr_ ...

  2. python(二) jupyter 快捷键

    jupyter notebook 中的快捷键介绍 当你熟练使用notebooks的基本功能后,掌握他的快捷键是十分必要的,这样可以大大提高你的工作效率.下面是一些比较常用的快捷键: 编辑模式:点击单元 ...

  3. CF 1114D(538,div2) Flood Fill

    https://codeforces.com/contest/1114/problem/D 题目 给一串数字,首先选择一个位置,类似于画图,然后每一轮按照以下步骤: 可以将这个位置所在的连通块改成其他 ...

  4. LeetCode 1291. 顺次数

    地址 https://leetcode-cn.com/problems/sequential-digits/submissions/ 题目描述我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 ...

  5. acwing 851. spfa求最短路 模板

    地址 https://www.acwing.com/problem/content/description/853/ 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出 ...

  6. Django中的sql注入

    Django中防止SQL注入的方法 方案一总是使用Django自带的数据库API.它会根据你所使用的数据库服务器(例如PostSQL或者MySQL)的转换规则,自动转义特殊的SQL参数.这被运用到了整 ...

  7. RabbitMQ与Spring的框架整合之Spring Boot实战

    1.RabbitMQ与Spring的框架整合之Spring Boot实战. 首先创建maven项目的RabbitMQ的消息生产者rabbitmq-springboot-provider项目,配置pom ...

  8. go-爬图片

    go语言爬取图片 注:动态加载出来的爬取不到,或怕取出来图片出错,代码中的网页是可以正常爬取的 package main import ( "fmt" "io" ...

  9. Selenium(十三):验证码的处理、WebDriver原理

    1. 验证码的处理 对于Web应用来说,大部分的系统在用户登录时都要求用户输入验证码.验证码的类型很多,有字母数字的.有汉字的,甚至还需要用户输入一道算术题的答案的.对于系统来说,使用验证码可以有效地 ...

  10. docker容器的学习笔记

    目录 Docker入门学习笔记(一) 1. 什么是Docker? 2. Docke的目标 3. Docker通常应用场景 4. Docker的基本组成 补:Docker容器相关技术简介 安装Docke ...