当前位置: 首页 > news >正文

泷羽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 文件。
http://www.lryc.cn/news/496616.html

相关文章:

  • Milvus×OPPO:如何构建更懂你的大模型助手
  • 单片机几大时钟源
  • reverse学习总结(12)
  • 基于“微店 Park”模式下 2+1 链动模式商城小程序的创新发展与应用研究
  • C++11:【列表初始化】【右值引用和移动语义】
  • Zookeeper的通知机制是什么?
  • 嵌入式蓝桥杯学习1 电量LED
  • bsmap输出结果解释
  • 【java-数据结构篇】揭秘 Java LinkedList:链表数据结构的 Java 实现原理与核心概念
  • macOS运行amd64的镜像
  • 轻量的基于图结构的RAG方案LightRAG
  • 计算机的错误计算(一百七十三)
  • 【力扣】—— 二叉树的前序遍历、字典序最小回文串
  • linux替换更高版本gcc
  • 在Java中使用Apache POI导入导出Excel(六)
  • `uni.setClipboardData` 是 uni-app 提供的一个 API 设置系统剪贴板的内容
  • 【大模型微调】pdf转markdown
  • Vue 3 结合 TypeScript基本使用
  • Trotter steps的复杂性分析
  • mean,median,mode,var,std,min,max函数
  • JavaScript实现tab栏切换
  • 精确电压输出,家电和工业设备的完美选择,宽输入电压线性稳压器
  • 深入理解定时器:优先队列与时间轮实现
  • autogen-agentchat 0.4.0.dev8版本的安装
  • JAVA |日常开发中读写XML详解
  • React 路由与组件通信:如何实现路由参数、查询参数、state和上下文的使用
  • 帮我写一篇关于AI搜索网页上编写的文章是否存在版权问题的文章, 字数在 3000 字左右。文心一言提问, 记录后用.
  • 电脑关机的趣味小游戏——system函数、strcmp函数、goto语句的使用
  • AttributeError: ‘DataFrame‘ object has no attribute ‘append‘的参考解决方法
  • java垃圾回收机制介绍