目录

一、判断用户参数

1.1 文件判断参数

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

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

实例:

1.2 比较运算符

实例:

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

1.3 字符串比较符

实例:

二、流程控制语句

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

2.1 if条件判断语句

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

2.1.1 if单分支语句

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

语法:

if 条件表达式;then
命令
fi

实例:

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

2.1.2 if双分支语句

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

语法:

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

实例:

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

2.1.3 if多分支语句

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

语法:

if 条件语句1;then
命令1
elif 条件语句2;then
命令2
...
else
命令
fi

实例:

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

2.2 for循环语句

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

语法:

语法一:
for 变量名 in 取值列表
do
命令
done
语法二:
for ((expr1;expr2;expr3));do 命令列表 done 

实例:

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

2.3 while语句

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

语法:

while 条件
do
命令
done

补充:

1)break:终止循环

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

2.4 case条件语句

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

语法:

case 模块名 in
模式1)
命令;;
模式2)
命令;;
...
*)
命令
esac

实例:

# cat case.sh
#!/bin/bash
read -p "请输入任意字符,并按Enter键确认:" KEY
case $KEY in
[a-z][A-Z])
echo "您输入是字母。"
;;
[0-9])
echo "您输入是数字。"
;;
*)
echo "您输入是空格,下划线,功能键或其他"
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. ADB常用命令(一)

    转自:https://blog.csdn.net/qq_26552691/article/details/81348222 一.操作前请确认电脑上已配置好ADB环境.可在CMD命令行输入adb,如果出 ...

  2. 洛谷 UVA1328 Period

    洛谷 UVA1328 Period 洛谷传送门 题目描述 PDF 输入格式 无 输出格式 无 题意翻译 题意描述 对于给定字符串S的每个前缀,我们想知道它是否为周期串.也就还是说,它是否为某一字符串重 ...

  3. Java连载58-静态内部类、成员内部类详解

    一.内部类的分类: (1)静态内部类(2)成员内部类(3)局部内部类(4)匿名内部类 二.静态内部类 1.静态内部类可以等同的看做是静态变量 内部类的重要作用:可以访问外部类中的私有数据 2.静态内部 ...

  4. Java连载55-Mail编程

    一.电子邮件的历史 1.起源: 1969 Lenoard K. 教授发给同事的“LO” 1971 美国国防部自主的阿帕网(Arpanet)的通讯机制 通讯地址里用@ 1987年中国的第一份电子邮件 “ ...

  5. javascript es6 Promise 异步同步的写法(史上最简单的教程了)

    1 来个简单的例子 var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.lo ...

  6. (五十九)c#Winform自定义控件-池子(工业)-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  7. ASP.NET图片上传和截取

    一.介绍:图片的上传直接使用ajax就可以了,截取图片的话使用到Jcrop插件. 图片上传资料:https://www.jb51.net/article/87654.htm 截取图片插件:http:/ ...

  8. zookeeper的java问题

    执行bash ./bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /data/zookeeper-3.4.9/b ...

  9. python django-admin.py startproject xxx 错误:from django.core import management

    1. Python安装路径以及Python安装路径\Script文件夹,已经添加到PATH环境变量中. 2. 查看django 版本正常: import django print(django.__v ...

  10. goweb-http协议

    先链接到一个我的另一篇有关HTTP的博客 第一次访问时会有些慢~~~ http协议 因为编写 Web 应用必须对 HTTP 有所了解,所以我们对 HTTP 进行介绍 HTTP 协议简介 HTTP 超文 ...