条件测试 、 if选择结构 、 循环结构

条件测试

条件测试 测试执行是否成功

 

==   
!= 
-z 为空
格式:
test 表达式
[]

字符串

变量最好加引号,避免被认为语法错误

 


    test abc == abc
    [ abc == abc ]
    echo $?
    [ abc != abc ]
    a=abc
    [ $a == abc ]
    [ -z $c ]   判断变量是否为空
    [ ! -z $c ] 判断变量是否非空

数字

 

-eq   是否等于
-ne   是否不等于
-gt   是否大于
-ge   是否大于等于
-lt   是否小于
-le   是否小于等于

    [ 100 -eq 100 ]  

文件测试 读写权限限制对管理员无效

 

-e  测试文件是否存在 不论类型
-f  测试文件是否存在 必须是普通文件
-d   测试文件是否存在 必须是目录
-r  判断当前用户对文件是否有读权限
-w  判断当前用户对文件是否有写权限
-x  判断当前用户对文件是否有执行权限  

    [ -e /opt/1.txt ]  

逻辑测试

 

&&  之前任务成功 才执行之后任务  
||  之前任务失败 才执行之后任务
;   没有逻辑关联,前面执行完 后面执行

    是管理员就继续执行  不是就退出
    [ $UID -ne 0 ] && echo "你不是管理员,程序退出" && exit
    
    
    ls  && ls && ls
    
    [ $UID -eq 0 ] && echo 'i am root' || echo 'i am not root'

if选择结构

单分支

 

if 条件测试;then
命令序列1
fi

双分支

 

if 条件测试;then
命令序列1
else
命令序列2
fi
	#!/bin/bash
	# ping通与不通
	ping -c 3 -i 0.2 -W 1 127.0.0.1 &> /dev/null
	if [ $? -eq 0 ];then
	  echo '127.0.0.1 ping通了'
	else
	  echo '127.0.0.1 ping不通'
	fi

多分支

 

if 条件测试1;then
命令序列1
elif 条件测试2;then
命令序列2
else
命令序列n
fi
	
	read -p "请输入用户成绩:" n
	if [ $n -ge 80 ];then
	  echo "你的评级为:优秀"
	elif [ $n -ge 70 ];then
	  echo "你的评级为:良好"
	elif [ $n -ge 60 ];then
	  echo "你的评级为:及格"
	else
	  echo "你的评级为:不及格"
	fi
	
	
	#!/bin/bash
	# 制作一个猜数的游戏
	let a=RANDOM
	read -p "请输入一个0-10之间的整数:" n
	if [ $n -eq $a ];then
	  echo "恭喜你猜对了"
	else
	  echo "猜错了,系统数为:"${a}
	fi
ping -c 3 -i 0.2 -W 1 127.0.0.1
i 每0.2s ping一次
c ping3次
W ping不通 1s返回

循环结构

for

 

for 变量名 in 值1 值2.。
do
	命令序列
done
	
	#!/bin/bash
	# 我是for循环
	for i in a b c
	do
	        echo "123"${i}
	done
	
	#!/bin/bash
	# 我是for循环
	for i in {1..10}
	do
	        echo "123"${i}
	done
	
	
	#!/bin/bash
	# 我是for循环
	a=10
	for i in `seq $a`
	do
	        echo "123"${i}
	done
	
	
	
	#!/bin/bash
	# ping一组机器
	a=0;b=0
	for i in {130..135}
	do
	        ping -c 3 -i 0.2 -W 1 192.168.10.$i &> /dev/null
	        if [ $? -eq 0 ];then
	                echo "192.168.10.${i}通了"
	                let a++
	        else
	                echo "192.168.10.${i}不通"
	                let b++
	        fi
	done
	echo "${a}台机器通信正常"
	echo "${b}台机器通信异常"
	
	
	
	#!/bin/bash
	# 我是for循环
	a=10
	for ((i=1;i<5;i++))
	do
	        echo "123"${i}
	done
	

while

 

while 条件测试
do
	命令序列
done
	
	#!/bin/bash
	# 猜对才罢休
	a=1
	b=$[RANDOM]
	while [ $a -eq 1 ]
	do
	        read -p "请输入一个数字【0-10】:" n
	        if [ $n -eq $b ];then
	                echo "恭喜你猜对了!"
	                a=0
	        elif [ $n -gt $b ];then
	                echo "猜大了"
	        else
	                echo "猜小了"
	        fi
	done
	
	
	
	while :  冒号 表示条件测试永远正确
	do
		
	done

评论