一起来学Shell脚本编程(七)

简介: 一起来学Shell脚本编程(七)

前言

目前正在出一个Shell脚本编程系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~

前面我们学习了Linux的一些基本命令,需要我们在终端手动去执行,但在处理一些复杂的操作就显得有点乏力,需要不停的执行,还很容易出错。有没有一种办法,可以帮助我们执行这一些列操作,方法当然有,那就是通过脚本去解决。

作为服务端开发,shell脚本编程还是要掌握一下的,可以做做基础性的运维,提高工作效率。

本系列主要以Linux Bash为主 ,好了, 废话不多说直接开整吧~

定向输出

有时候我们可以将命令执行的结果输出到一个文件中

echo "hello world" > hello.txt

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# cat hello.txt
hello world
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

接着执行:

echo "你好, 世界" > hello.txt

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# cat hello.txt
你好, 世界
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

我们发现,文件中的结果被覆盖了,如果是输出日志到文件中,那肯定是不行的,日志会丢失,那如何追加到文件中呢?

接着看:

echo "hello world" >> hello.txt

结果:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# cat hello.txt
你好, 世界
hello world
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

>>表示追加到文件尾, 那么有没有这种符号呢 <,下面接着看一个例子

wc -l hello.txt
wc -l < hello.txt

结果:

2 hello.txt
2

可以看到是一个反向输出,上述例子计算文件行

stdin & stdout & stderr

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息

如果需要将stderr输出到一个文件中可以这么写

command 2 > file

有时候,我们看到项目中的启动脚本会有这个2>&1,这个是什么意思呢? 这里指的是将stdoutstderr合并输出到文件

command >> file 2>&1

EOF

EOFEND Of File的缩写,表示自定义终止符,一般和cat一起使用

比如我们在脚本中写一段文档,我们不可能写在一行的,EOF这时候就显得很好用

cat << EOF
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
EOF

输出:

cat << EOF
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
EOF

我们也可以将它输出到文件:

cat >> eof.txt << EOF
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
EOF

输出:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# cat eof.txt
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
HELLO
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

这个功能还是比较常用的,比如替换配置文件中的配置,或者替换yum的镜像源,我们只要将地址输出到文件就可以了

/dev/null

有时候,我们会有这种需求,希望命令在执行的时候在终端不会输出任何东西,这个怎么做呢?我们可以将它输出到/dev/null

command > /dev/null

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃,同时也无法读取内容

[root@iZ2ze5vrnucj8nu52fq932Z shell]# cat eof.txt >> /dev/null 2>&1
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

可以看到没有任何结果输出

嵌入外部shell脚本

shell中也可以嵌入其它脚本,我们通过. shell_file或者source shell_file

下面看个例子:

# 脚本1
a="hello world"
# 脚本2
. ./a.sh
echo $a

执行./b.sh:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./b.sh
hello world
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

可以看到执行了a脚本中的变量被输出了

获取绝对路径

basepath=$(cd `dirname $0`; pwd)
echo $basepath

输出:

[root@iZ2ze5vrnucj8nu52fq932Z shell]# ./dir.sh
/root/linux_study/shell
[root@iZ2ze5vrnucj8nu52fq932Z shell]# 

写成这样也是可以的

basepath=`pwd`
echo $basepath

结束语

本系列教程到此就结束了,大家可以把前面学习的知识总结一下,尝试去写一个复杂一点的工具脚本~ 同时,也可以看下别人写的shell,看是否能看懂,不懂的就多查资料,从中学习经验~

本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~

相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
75 1
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
17天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
39 2
6种方法打造出色的Shell脚本
|
3天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
13 1
|
8天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
22 2
|
22天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
43 6
|
18天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
Shell
Shell编程(下)
Shell编程(下)
88 1
|
1月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
40 1