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

目录

1、判断用户参数

1.1 文件判断参数

 

 

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

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

实例:centos

1.2 比较运算符

 

 

 

 

 

实例:bash

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

1.3 字符串比较符

 

 

 

 

实例:curl

 

 

2、流程控制语句

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

2.1 if条件判断语句

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

2.1.1 if单分支语句

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

语法:code

 

if 条件表达式;then 命令 fi

 

 

 

实例:htm

# 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
相关文章
相关标签/搜索