Shell编程 第二章 判断

本文详细介绍了Shell脚本中的条件判断语法结构,包括文件类型的判断、文件权限判断、整数和字符串比较,以及多重条件判断。同时,讲解了流程控制语句的用法,如if...else结构、if...elif...else结构、case语句等,并通过实例演示了如何在脚本中运用这些条件判断和流程控制进行逻辑控制。
摘要由CSDN通过智能技术生成

一、条件判断语法结构

1. 条件判断语法格式

测试表达式是否成立,若成立返回0,否则返回其他数值

格式一:test 条件表达示
格式二:[ 条件表达示 ]
格式三: [[ 条件表达式 ]] 支持正则
特别说明:
[ 两边有空格 ]  [[ 两边有空格]]

注:if 中使用 =~操作符 是指支持shell正则表达。

2. 条件判断相关参数

判断文件类型,判断文件新旧,判断字符串是否相等,判断权限等等…

(1)判断文件类型

判断参数含义
-e判断文件是否存在(任何类型文件)
-f存在且是普通文件
-d存在且是目录
-L软连接文件
-b块设备文件
-S套接字文件
-c字符设备文件
-p命名管道文件
-s非空文件(有内容)

举例说明:

test -e file					只要文件存在条件为真
[ -d /shell01/dir1 ]		 	判断目录是否存在,存在条件为真
[ ! -d /shell01/dir1 ]		    判断目录是否存在,不存在条件为真
[[ -f /shell01/1.sh ]]		    判断文件是否存在,并且是一个普通的文件

2.判断文件权限

判断参数含义
-r当前用户对其是否可读
-w当前用户对其是否可写
-x当前用户对其是否可执行
-u是否有suid,高级权限冒险位
-g是否sgid,高级权限强制位
-k是否有t位,高级权限粘滞位

3.判断文件新旧

说明:这里的新旧指的是文件的修改时间。

判断参数含义
file1 -nt file2比较file1是否比file2新
file1 -ot file2比较file1是否比file2旧
file1 -ef file2比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode

4.判断整数

判断参数含义
-eq相等
-ne不等
-gt大于
-lt小于
-ge大于等于
-le小于等于

5.判断字符串

判断参数含义
-z判断是否为空字符串,字符串长度为0则成立
-n判断是否为非空字符串,字符串长度不为0则成立
string1 == string2(等号两边有空格)判断字符串是否相等
string1 != string2(等号两边有空格)判断字符串是否相不等

6.多重条件判断

判断符号	     含义	                    举例
-a 和 &&	逻辑与   [ 1 -eq 1 -a 1 -ne 0 ] [ 1 -eq 1 ] && [ 1 -ne 0 ]
-o 和 ||	逻辑或	[ 1 -eq 1 -o 1 -ne 1 ] [ 1 -eq 1 ] || [ 1 -ne 0 ]

特别说明:

  • && 前面的表达式为真,才会执行后面的代码

  • || 前面的表达式为假,才会执行后面的代码

  • ; 只用于分割命令或表达式

二、流程控制语句

1.if语句

(1)IF结构
F:表示false,为假

T:表示true,为真

if [ condition ];then
		command
		command
fi

if test 条件;then
	命令
fi

if [[ 条件 ]];then
	命令
fi

[ 条件 ] && command
(2)if…else结构
if [ condition ];then
		command1
	else
		command2
fi

[ 条件 ] && command1 || command2

例子(ping主机)

[root@root dev]# vi ping.sh             ##编写脚本文件
#!/bin/bash
ping -c 3 -i 0.2 -w 3 $1 &> /dev/null   ## -c:发送3个包,-i:间隔0.2秒,-w:超时3秒
if [ $? -eq 0 ]
then
 echo "$1 is up"
else
 echo "$1 is down"
fi
(3)if…elif…else结构
if [ condition1 ];then
		command1  	结束
	elif [ condition2 ];then
		command2   	结束
	else
		command3
fi

注释:
如果条件1满足,执行命令1后结束;如果条件1不满足,再看条件2,如果条件2满足执行命令2后结束;如果条件1和条件2都不满足执行命令3结束.

例子(查分数)

[root@root dev]# vi grade.sh
#!/bin/bash
read -p "请输入你的分数:" grade
if [ $grade -ge 85 ] && [ $grade -le 100 ]
then
 echo "$grade分!优秀"
elif [ $grade -ge 60 ] && [ $grade -le 84 ]
then
 echo "$grade分!良好" 
else
 echo "$grade分!不及格"
fi
(4)层层嵌套结构
if [ condition1 ];then
		command1		
		if [ condition2 ];then
			command2
		fi
 else
		if [ condition3 ];then
			command3
		elif [ condition4 ];then
			command4
		else
			command5
		fi
fi

注释:

  • 如果条件1满足,执行命令1;如果条件2也满足执行命令2,如果不满足就只执行命令1结束;
  • 如果条件1不满足,不看条件2;直接看条件3,如果条件3满足执行命令3;如果不满足则看条件4,如果条件4满足执行命令4;否则执行命令5

例子

vim string.sh
#!/usr/bin/bash
while : #:默认值为真
do
read -p "请输入你的密码: " a
pass=123456
if [ -z $a ];then
        echo "您输入的密码不能为空"
        exit 1
else
        if [ $a = $pass ];then
                echo "登录成功"
                break
        else
                echo "您的密码输入有误,请重新输入"
        fi
fi
done
(5)多个条件联合
&&:逻辑与,前面执行成功,后面才执行。前面命令执行失败,后面命令也不执行
if [ $condition1 ] && [ $condition2 ];then 
if [[ $condition1 && $condition2 ]];then

||:逻辑或,前面执行失败,后面执行,前面命令执行成功,后面不执行。
if [ $condition1 ] || [ $condition2 ];then 
if [[ $condition1 || $condition2 ]];then

2.Case语句

case 变量值 in
     模式1)
	  命令序列1
	 ;;
     模式2)
	  命令序列2
	 ;;
	  ......
     *)
	  默认命令序列
	 ;;
esac
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值