Linux下的Shell编程(欧拉篇六)test方括号命令的使用方法之标准输入输出状态与正则表达式的使用

本文介绍了如何在Linux下的Shell编程中使用test方括号命令判断标准输入输出是否连接终端,并通过正则表达式实现字符串、IP地址、电子邮件、URL和日期格式的验证实例。
摘要由CSDN通过智能技术生成

Linux下的Shell编程(欧拉篇六)test方括号命令的使用方法之标准输入输出状态与正则表达式的使用

  • 摘要:标准输入输出是否关联终端判定;使用正则表达式验证IP地址、使用正则表达式验证特定字符串、使用正则表达式验证email地址、使用正则表达式验证url地址、使用正则表达式验证日期格式。

判断标准输入输出是否连接到终端

标准输入输出是否连接终端的判定表达式:[ -t FD ]

  • 表达式说明:通过文件描述符FD判断标准输入输出是否连接在终端上,表达式返回值 true

    FD默认是如下三个值:0、1、2。这三个文件描述符默认分别被分配给标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。

实例:下面用一个非常简单的脚本来理解这个判断的工作原理。
#!/bin/bash

# 检查标准输入文件描述符 0 是否已经关联到终端:
if [ -t 0 ]; then
    echo "标准输入已经连接到终端。"
else
    echo "标准输入没有连接到终端。"
fi

# 检查标准输出文件描述符 1 是否已经关联到终端:
if [ -t 1 ]; then
    echo "标准输出连接到终端。"
else
    echo "标准输出没有连接到终端。"
fi
  • 默认状态下标准输入和标准输出都连接在终端
[root@localhost ~/test]$./varfile02.sh
标准输入已经连接到终端。
标准输出连接到终端。
  • 将标准输出重定向到文件,运行脚本:
[root@localhost ~]$./varfile02.sh > out01.txt
[root@localhost ~]$cat out01.txt
标准输入已经连接到终端。
标准输出没有连接到终端。
  • 将标准输入重定向自文件,将标准输出重定向到文件,运行脚本:
[root@localhost ~]$./varfile02.sh < abc.sh > out02.txt
[root@localhost ~]$cat out02.txt
标准输入没有连接到终端。
标准输出没有连接到终端。

正则表达式匹配

使用正则表达式。

  • 匹配正则表达式使用符号:“=~”

  • 格式如下:[[ 变量 =~ 正则表达式 ]]

实例1:检查字符串是否匹配正则表达式;字符串规则:开头由Hello组成,后面接不限长度的数字。
#!/bin/bash

read -p "请输入字符串格式为Hello与数字组合:" string

if [[ $string =~ ^Hello[0-9]+$ ]]; then
    echo "字符串匹配正则表达式。"
else
    echo "字符串不匹配表达式。"
fi
  • 运行局脚本,显示运行结果:
[root@localhost ~/test]$./regex01.sh
请输入字符串格式为Hello与数字组合:Hello546846546841654
字符串匹配正则表达式。

[root@localhost ~/test]$./regex01.sh
请输入字符串格式为Hello与数字组合:Helloksdkfsd6546465465465
字符串不匹配表达式。
实例2:检查归档文件名是否符合特定要求
#!/bin/bash

filename="archive-2024-04-10.tar.gz"

if [[ $filename =~ ^archive-[0-9]{4}-[0-9]{2}-[0-9]{2}\.tar\.gz$ ]]; then
    echo "为归档创建的文件名字“符合”归档文件名字要求。"
else
    echo "为归档创建的文件名字“不符合”归档文件名字要求。"
fi
  • 运行脚本,显示脚本运行结果:
[root@localhost ~/test]$./regex02.sh
为归档创建的文件名字“符合”归档文件名字要求。
[root@localhost ~/test]$
实例3:验证录入的电子邮件地址格式。
#!/bin/bash

read -p "请输入你的email地址:" email

if [[ $email =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
    echo "电子邮件地址有效。"
else
    echo "电子邮件地址无效。"
fi
  • 运行脚本,显示脚本运行结果:
[root@localhost test]# ./regex03.sh
请输入你的email地址:40725054@qq.com
电子邮件地址有效。

[root@localhost test]# ./regex03.sh
请输入你的email地址:admin_7548@sk_wd84.cn
电子邮件地址无效。
[root@localhost test]#
实例4:简单的检查IPv4地址格式是否合规。
  • 注意:这种正则表达式只能进行格式检查,无法对地址规则进行检查,比如:300.300.300.300是无法辨别错误的。
#!/bin/bash

read -p "输入IPv4地址:" ip

if [[ $ip =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
    echo "IP地址格式正确。"
else
    echo "IP地址格式不正确。"
fi
  • 运行脚本,显示脚本运行结果:
[root@localhost test]# ./regex04.sh
输入IPv4地址:183.1532.1.10
IP地址格式不正确。

[root@localhost test]# ./regex04.sh
输入IPv4地址:300.300.300.300
IP地址格式正确。

[root@localhost test]# ./regex04.sh
输入IPv4地址:10.30.0.251
IP地址格式正确。
实例5:检查URL格式是否正确。
#!/bin/bash

read -p "输入完整URL地址:" url

if [[ $url =~ ^(http|https)://([^/\s:]+)(:[0-9]+)?(/.*)?$ ]]; then
    echo "URL 格式正确。"
else
    echo "URL 格式错误。"
fi
  • 运行脚本,显示脚本运行结果:
[root@localhost test]# ./regex05.sh
输入完整URL地址:https://www.baidu.com/abc?=4562354
URL 格式正确。
实例6:检查日期格式(YYYY-MM-DD)
#!/bin/bash

read -p "请以此格式输入日期(YYYY-MM-DD):" date

if [[ $date =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
    echo "日期格式正确。"
else
    echo "日期格式错误。"
fi
  • 运行脚本,显示脚本运行结果:
[root@localhost test]# ./regex06.sh
请以此格式输入日期(YYYY-MM-DD):2024-04-12
日期格式正确。

[root@localhost test]# ./regex06.sh
请以此格式输入日期(YYYY-MM-DD):20240412
日期格式错误。

[root@localhost test]# ./regex06.sh
请以此格式输入日期(YYYY-MM-DD):2024.04.12
日期格式错误。

[root@localhost test]# ./regex06.sh
请以此格式输入日期(YYYY-MM-DD):2024-4-12
日期格式错误。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m976382

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值