Shell基础学习---3、Read读取控制台输入、函数、综合应用案例:归档文件、正则表达式入门(第二天学习)

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Shell基础学习---3、Read读取控制台输入、函数、综合应用案例:归档文件、正则表达式入门

1、Read读取控制台输入

1、基本语法

read (选项) (参数)

image.png

#!/bin/bash
read -t 10 -p "请输入您的名字: " name
echo "welcome, $name"

image.png

image.png

2、函数

2.1 系统函数

2.1.1 basename

1、基本语法

 basename [string /pathname] [suffix]  (basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来)。

 basename可以理解为取路径里的文件名称。

 选项:

 suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

2、案例实操

data + %s得到时间戳

image.png

#!/bin/bash
filename="$1"_log_$(date +%s)
echo $filename
2.1.2 dirname


image.png

image.png

image.png

image.png

image.png

系统日志生成


1、基本语法

dirname 文件绝对路径 (从给定的包含绝对路径的文件名(非目录部分),然后返回剩下的路径(目录的部分))

dirname 可以理解为取文件路径的绝对路径名称

2、案例实操

image.png

$( ________)命令替换

image.png

image.png

2.2 自定义函数

1、基本语法

[ function ] funname[()]
{ 
  Action;
  [return int;]
}

2、经验技巧

(1)必须在调用函数地方之前,先声明函数,shell脚本时逐行运行。不会像其他语言一样先编译。

(2)函数返回值,只能通过$?系统变量获得,可以显示加:Return 返回,如果不加,将以最后一条命令运行结果作为返回值。return 后跟数值n(0-255)

3、案例实操

#!/bin/bash
function add(){
        s=$[$1+$2]
        echo "和为"$s
}
read -p "请输入第一个整数: " a
read -p "请输入第二个整数: " b
sum=$( add $a $b )
echo "和: "$sum

image.png

image.png

综合应用案例

3.1 归档文件

实际生产应用中,往往需要对重要数据进行归档备份。

需求:实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive下。

这里用到了归档命令:tar

后面可以加上-c选项表示规定,加上-z选项表示同时进行压缩,得到的文件后缀名为.tar.gz。

linux内核定时任务cron表达式

首先定义一个daily_archive.sh文件

-d指的是一个目录

-zcvf压缩,-zxvf解压,在于c和x,用抽象(抽象来记)


#!/bin/bash
#首先判断输入参数个数是否为1
if [ $# -ne 1 ]
then
        echo "参数个数错误!应该输入一个参数,作为归档目录名"
        exit
fi
# 从参数中获取目录名称
if [ -d $1 ]
then
        echo
else
        echo
        echo "目录不存在!"
        echo
        exit
fi
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd)
# 获取当前日期
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE
# 开始归档目录文件
echo "开始归档..."
echo
tar -czf $DEST $DIR_PATH/$DIR_NAME
if [ $? -eq 0 ]
then
        echo
        echo "归档成功!"
        echo "归档文件为:$DEST"
        echo
else
        echo "归档出现问题!"
        echo
fi
exit

image.png

image.png

3.2 定期归档

使用crontab

分时日月周

image.png

#每天晚上凌晨2点开始保存
0 2 * * * 、/root/scripts/daily_archive.sh /root/scripts

4、正则表达式入门

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中,grep,sed,awk等文本处理工具都支持通过正则表达式进行模式匹配。

4.1 常规匹配

一串不包含特殊字符的正则表达式匹配它自己

image.png

4.2 常用特殊字符

1、特殊字符 ^
  匹配一行的开头

image.png

2、特殊字符 $

匹配一行的结尾

image.png

3、特殊字符 .

匹配一个任意字符

image.png

4、特殊字符 *

*不会单独使用,它和上一个字符连用,表示匹配上一个字符0次或多次

image.png

5、字符区间(中括号): [ ]

[ ] 表示匹配某个范围内的一个字符

[6,8] 匹配6或8

[0-9]匹配一个0-9的数字

[0-9]* 匹配任意长度的数字字符串

[a-z] 匹配一个a-z之间的字符

[a-z]*匹配任意长度的怎么字符串

[a-c,e-f] 匹配a-c或者e-f之间的任意字符

image.png

6、特殊字符

\表示转义,并不会单独使用。由于所有特殊字符都会有其特点匹配模式,当我们想匹配某一个特殊字符串本身时,就会碰到困难。此时我们要将转义字符和特殊字符连用,来表示特殊字符本身。

注意:要使用单引号将表达式引起来(前后都要)

image.png





目录
打赏
0
0
1
0
64
分享
相关文章
让我们熟悉一下 shell 正则表达式使用
正则表达式是一种文本处理工具,用于匹配、查找、替换或提取字符串中的特定模式。通过普通字符和特殊字符(元字符)组成,定义匹配规则。本文档通过示例展示了如何使用正则表达式进行字符串搜索、过滤和模式匹配,包括基本匹配、行首行尾定位、字符集使用、任意字符与重复字符处理以及限定重复次数等高级功能。
74 7
|
4月前
|
Shell 函数
10月更文挑战第4天
35 7
|
4月前
|
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
104 12
|
6月前
|
在Shell中转换Python正则表达式
结合以上提到的注意事项与差异点,就能在Shell环境中巧妙地转换并使用Python正则表达式了。务实和节省时间的做法是,将一些常见Python正则模式记在手边,随时查阅并对照POSIX标准进行调整。同时,借助在线正则表达式测试器和文档也能有效地提升在Shell环境中处理正则表达式的能力。
67 5
在Linux中, 什么是shell函数?如何使用它们?
在Linux中, 什么是shell函数?如何使用它们?
如何根据文件夹中文件,生成对应名字的图片,名称一样的路径,这里用到了变量,将集合定义在外面,字符串拼接,正则表达式截取.jpg文件
如何根据文件夹中文件,生成对应名字的图片,名称一样的路径,这里用到了变量,将集合定义在外面,字符串拼接,正则表达式截取.jpg文件
|
7月前
|
Shell 脚本编程学习
Shell 脚本编程学习
49 0
Shell 函数深入解析与实践
了解 Shell 函数的基础,包括定义、参数传递及返回值。函数定义有多种语法,如 `function func() {...}` 或 `func() {...}`。参数通过 `$1`, `$2` 等访问,`$@` 代表所有参数。`return` 用于返回退出状态码(0-255),非数值数据需用 `echo`。正确获取函数返回值应立即检查 `$?`,例如:`result=$?`。实践中不断探索和学习!
54 1
Linux-shell简单学习
Linux-shell简单学习
47 0
|
8月前
|
python正则表达式入门
python正则表达式入门
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等