shell 死循环if判断_【shell脚本语法】判断(if)、流程控制(for、while等)语句...

目录

一、判断用户参数

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

命令1else命令2

fi

实例:

#验证某台主机是否在线(这里使用从参数读取ip和直接写脚本中)#ping -c 指定次数,-i指定每个数据发送的间隔 -W指定等待时间#方法一:从参数读取ip#vi ifelseDemo.sh#!/bin/bash

if [ $#-eq 0 ];then

echo "[usage] 请使用./ifelseDemo.sh ip地址"exit0fi

ping-c 3 -i 0.2 -W 3 $1 &> /dev/nullif [ $? -eq 0];then

echo"$1 是通的"

elseecho"$1 是不通的"fi#方法二:将ip直接写脚本里#vi ifelseDemo2.sh#!/bin/bash

if `ping -c 3 106.53.73.200 &> /dev/null`;then

echo"通的"

elseecho"不通"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):"GRADEif [ $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"

elseecho"$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 "请输入用户密码:"PASSWDfor UNAME in`cat username.txt`doid$UNAME &> /dev/nullif [ $? -eq 0]

then

echo"$UNAME user is exists"

elseuseradd$UNAME &> /dev/null

echo"$PASSWD" | passwd --stdin $UNAME &> /dev/nullif [ $? -eq 0]

then

echo"$UNAME,Create success"

elseecho"$UNAME,Create failure"fi

fi

done

#大于数字1小于数字10#cat for.sh#!/bin/bash

for ((i=1;i<10;i++))doecho$idone#结果#./for.sh

1

2

3

4

5

6

7

8

9

#检查多个主机是否存活#cat ip.sh#!/bin/bash

for IP in ip地址

do

if `ping -c 2 $IP &> /dev/null`

then

echo-e "$IP OK"

elseecho"$IP NO"fi

done#结果#./ip.sh

ip地址OKip地址 OK

#检查多个域名是否可以访问#cat http.sh#!/bin/bash

URL="域名1www.baidu.com"

for i in $URL

doHTTP=`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"

elseecho"$i NO"fi

done#结果#./http.sh

域名1 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

2.5 Until循环语句

#知道满足条件才退出,否则执行action

until条件doaction

done

三、选择语句

select语句:

select 变量名 in语句doaction

done

[root@rhel8 shell]#cat select_menu.sh#!/bin/bash

PS3="Select your will exec Menu:"select iin "Apache" "MySQL" "PHP"

docase$i inApache)

echo"wait install httpd server...";;

MySQL)

echo"wait install MySQL server...";;

PHP)

echo"wait install PHP server...";;*)

echo-e "\033[32mUsage: { $0 Apache|MySQL|PHP|help}\033[0m";;

esac

done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值