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

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 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





相关文章
|
3月前
|
Shell
Shell 文件包含
10月更文挑战第5天
39 4
|
4月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Dubbo IDE Java
dubbo学习二:下载Dubbo-Admin管理控制台,并分析在2.6.1及2.6.1以后版本的变化
这篇文章是关于如何下载和部署Dubbo管理控制台(dubbo-admin)的教程,并分析了2.6.1版本及以后版本的变化。
117 0
dubbo学习二:下载Dubbo-Admin管理控制台,并分析在2.6.1及2.6.1以后版本的变化
|
3月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
88 12
|
5月前
|
Shell Linux 网络安全
在Linux中,如何利用Shell把10台主机的当前时间写到一个文件里边?
在Linux中,如何利用Shell把10台主机的当前时间写到一个文件里边?
|
6月前
|
Shell 测试技术 Linux
Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
78 3
|
5月前
|
Shell Linux 开发工具
在Linux中,如何编写shell脚本将当前目录下大于10K的文件转移到/tmp目录下?
在Linux中,如何编写shell脚本将当前目录下大于10K的文件转移到/tmp目录下?
|
5月前
|
Shell Linux Perl
在Linux中,编写一个shell脚本,用于统计指定目录下所有文件的行数。
在Linux中,编写一个shell脚本,用于统计指定目录下所有文件的行数。
|
6月前
|
Shell Linux
Shell 脚本编程学习
Shell 脚本编程学习
44 0
|
7月前
|
人工智能 运维 中间件
Linux-shell简单学习
Linux-shell简单学习
39 0