泷羽sec:shell编程(9)不同脚本的互相调用和重定向操作

声明:

学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷羽sec

泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频


不同脚本的互相调用

方法一:

首先使用rm *.sh 删掉所有shell脚本(注意,不要误删了自己的重要文件)

然后vim 1.sh 写入echo "hello world"

再创建一个2.sh脚本文件,写入. 1.sh

bash执行2.sh

你会发现输出了1.sh的内容

方法二:

创建的2.sh脚本文件,写入的是. 1.sh

我们可以把. 1.sh修改为source 1.sh

总结:

  • 命令rm *.sh用于删除当前目录下所有以.sh为扩展名的文件。这一步是为了确保环境干净,没有其他干扰的 shell 脚本。不过使用这个命令时要特别小心,因为一旦执行,所有符合条件的文件将被立即删除且无法恢复,如果误删了重要文件会造成损失。
  • 创建2.sh脚本文件,并在其中写入. 1.sh。在shell脚本中,.命令(或者source命令)用于在当前shell环境中执行另一个脚本文件。这里就是在2.sh执行时会调用并执行1.sh
  • 当在2.sh中使用. 1.sh(或source 1.sh)时,它会在当前shell进程中读取和执行1.sh的内容。这与直接执行bash 1.sh有区别。直接执行bash 1.sh会开启一个新的shell子进程来执行1.sh,而source操作是在当前shell进程内执行,这样如果1.sh中定义了变量等操作,这些变量在当前shell环境中会保留下来(如果是bash 1.sh执行,变量在子进程结束后就消失了)

这种脚本间的调用方式在很多场景下都很有用,比如当需要在一个脚本中复用另一个脚本的函数、变量或初始化操作时,可以采用这种方法。

实例:

vim 3.sh写入

name="icetea"

age=21

vim 2.sh写入

source 3.sh

echo "My name is $name and i am $age"

然后bash 2.sh执行脚本

重定向操作

重定向的基本概念

  • 在 Linux 中,重定向是一种将命令的输入、输出或错误信息发送到不同位置的机制。常见的重定向操作符有:
    • >:用于将命令的标准输出重定向到一个文件。如果文件不存在,会创建新文件;如果文件存在,会覆盖原有内容。
    • >>:将标准输出重定向到一个文件,但不会覆盖原有内容,而是追加到文件末尾。
    • <:用于将文件内容作为命令的输入。
    • 2>:用于将命令的错误输出重定向到一个文件。
    • &>:将标准输出和错误输出都重定向到一个文件。

输出重定向

例1:

ls >1.txt

cat 1.txt

例2:

who >1.txt

cat 1.txt

例3:

ls >>1.txt

cat 1.txt

例4:把ls 命令重定向到垃圾桶回收站,执行后,ls没有回显

ls > /dev/null

输入重定向

例1:

创建 dirs.txt 文件,写入以下内容
/home/kali/下载
/home/kali/图片
/home/kali/音乐
( 这段路径因人而异,需要根据自己的路径来写)
使用 ls 命令结合输入重定向来查看这些目录下的文件
ls -l < dirs.txt

这个命令会从 dirs.txt 文件读取目录名称作为 ls -l 命令的输入,然后分别列出这些目录下文件的详
细信息,比如文件权限,所有者,大小,修改时间等内容。
但是实操几次发现每次都是输出了当前目录的全部内容 未解决
查资料,换条指令查看
cat dirs.txt | xargs -I {} ls -ld {}

xargs ls -ld < dirs.txt

xargs 命令将文件内容作为参数传递给 ls -ld
这个命令会读取 dirs.txt 文件的每一行,并使用 ls -ld 命令列出每个目录的详细信息

例2:

读取 subdirs.txt 文件中的每个子目录名称,然后使用 ls 命令列出每个子目录的内容
创建递归目录
mkdir -p /home/kali/桌面/test1/1
mkdir -p /home/kali/桌面/test2/2
mkdir -p /home/kali/桌面/test3/3
编写 subdirs.txt 文件
/home/kali/桌面/test1/
/home/kali/桌面/test2/
/home/kali/桌面/test3/
使用 xargs ls < subdirs.txt 进行查看

输出重定向和输出重定向区别

输出重定向影响命令的输出,输入重定向影响命令的输入
输出重定向用于改变输出的位置,输入重定向用于改变输入的来源
输出重定向是将数据从命令流向文件或其他命令,输入重定向是将数据从文件或其他命令流向命

文件描述符

标识打开的文件的一个抽象的数字,每个打开的文件都会被分配一个文件描述符,用于后续的文
件操作
0 :标准输入,这是程序默认的输入来源,通常与键盘关联。在 shell 脚本中,你可以使用 < 操作
符来重定向标准输入,将文件或其他命令的输出作为脚本的输入
1 :标准输出这是程序默认的输出目的地,通常与屏幕关联。在 shell 脚本中,你可以使用 > 操作
符来重定向标准输出,将脚本的输出保存到文件中。
2 :错误输出,这是程序用于输出错误信息的文件描述符,通常也与屏幕关联。在 shell 脚本中,
你可以使用 2> 操作符来重定向标准错误,将错误信息保存到文件中

例1:

如果ls命令正确,内容输入到1.txt,如果错误,则把错误信息输出到2.txt

ls > 1.txt 2> 2.txt

查看1.txt

cat 1.txt

coo是不存在的指令,会把错误信息输出到2.txt

coo > 1.txt 2> 2.txt

查看2.txt

cat 2.txt

例2:

更复杂的重定向操作,同时重定向标准输出和标准错误到同一个文件
command > output.log 2>&1
2>&1 表示将标准错误(文件描述符 2 )重定向到标准输出(文件描述符 1 )当前的位置,即
output.log 文件。

相关推荐
Curtis09801 小时前
RHCE——Ubuntu Linux操作系统
linux·服务器·ubuntu
YRr YRr4 小时前
在Ubuntu 20.04和ROS中使用RViz进行数据可视化:详解Fixed Frame参数的选择与应用
linux·ubuntu·信息可视化
Hansel_Zhang4 小时前
CentOS 7 docker部署jar包
linux·docker·centos
运维&陈同学5 小时前
【Dubbo03】消息队列与微服务之dubbo-admin 二进制与编译安装
linux·运维·服务器·后端·微服务·云原生·架构·dubbo
Lemon_man_6 小时前
算法——反转字符串中的单词(leetcode151)
java·linux·前端
灼华十一6 小时前
消息队列-kafka
linux·docker·golang·kafka
MineGi7 小时前
0017. shell命令--tac
linux·bash
caz287 小时前
Windows远程桌面连接到Linux
linux·运维·服务器
Jackey_Song_Odd9 小时前
github webhooks 实现网站自动更新
linux·服务器·网络·ssh·github
zyy291829189 小时前
嵌入式Linux无窗口系统下搭建 Qt 开发环境
linux·嵌入式硬件·qt·物联网·iot