🏡作者主页:点击!
🛠️Shell编程专栏:点击!
⏰️创作时间:2024年6月12日10点50分
🀄️文章质量:93分
——前言——
在Shell编程中,重定向和管道符是两个极其重要的概念,它们让你能够高效地管理输入输出流,并实现强大的命令组合。通过重定向,你可以将命令的输出保存到文件或将文件的内容作为命令的输入,而管道符则允许你将一个命令的输出直接作为另一个命令的输入,从而实现复杂的任务链。在本篇指南中,我们将深入探索重定向和管道符的使用技巧,带你掌握这些强大工具的应用,为你的Shell编程技能注入新的活力。让我们一起开始吧!
重定向和管道符是shell中常用的两种用于控制命令输入输出的技术,它们在shell脚本中有广泛的应用,可以提高脚本的效率和灵活性。
💯趣站💯
前些天发现了一个巨牛的🤖人工智能学习网站,通俗易懂,风趣幽默,忍不住粉香一下给大家,人工智能, 机器算法等...... 点击跳转网页!https://www.captainbed.cn/sis/
🎆1.重定向输出
重定向输出指的是将命令的正常输出结果保存在指定的文件中,而不是直接显示在显示器的屏幕上。重定向输出使用 '>'或者'>>' 操作符,以便用户覆盖和追加。
若重定向输出的目标文件不存在,则会新建文件,然后将前面的命令输出的结果保存到该文中。
若重定向输出的目标文件存在,则将输出结果覆盖或追加到文件中。
例如,若要将当前主机的CPU类型信息(uname -p) 保存到 1.txt文件中,而不是显示到屏幕上
[root@localhost ~] uname -p > 1.txt
[root@localhost ~] cat 1.txt
x86_64
当需要保留原有的目标文件原有的内容时,应改用'>>' 操作符号 追加内容,而不是覆盖内容。
如下操作
[root@localhost ~] uname -r > 1.txt
[root@localhost ~] cat 1.txt
3.10.0-1160.114.2.el7.x86_64
可以看到我们使用> 里边的原有内容被覆盖掉了
正确操作
[[root@localhost ~] uname -p > 1.txt
[root@localhost ~] uname -r >> 1.txt
[root@localhost ~] cat 1.txt
x86_64
3.10.0-1160.114.2.el7.x86_64
🎇2.重定向输入
重定向输入指的是将命令中接收输入的途径有默认键盘改为指定的文件,而不是等待从键盘输入。重定向输入使用 '<'符号
通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成。例如,使用passwd命令为用户设置密码时,每次都必须根据提示输入两次密码字串,非常烦琐,若改用重定向输入将可以省略交互式的过程,而自动完成密码设置(结合passwd命令的“--stdin”选项来识别标准输入)
正常的更新密码 需要手动输入两次 太麻烦
[root@localhost ~] passwd hello
更改用户 hello 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新
使用< 符号 不需要交互大大的节省了时间
vim pass.txt
123456
[root@localhost ~] passwd --stdin hello < pass.txt
更改用户 hello 的密码 。
passwd:所有的身份验证令牌已经成功更新。
🎑3.管道操作
管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。 在 Shell 脚本应用中,管道操作通常用来过滤所需要的关键信息。例如,使用 grep 命令查询使用/bin/bash 作为 Shell 的用户名称时,会输出符合条件的整行内容,在此基础上可以结合管道操作与awk 命令做进一步过滤,只输出用户名和登录 Shell 列。
[root@localhost ~] grep '/bin/bash$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
joke:x:1000:1000::/home/joke:/bin/bash
hello:x:1001:1001::/home/hello:/bin/bash
通过管道符来简化
[root@localhost ~] grep '/bin/bash$' /etc/passwd |awk -F: '{print $1,$7}'
root /bin/bash
joke /bin/bash
hello /bin/bash
这样我们可以直观的看到用户和对应的Shell
上个案例中awk是三剑客的其中之一
上例中 awk 命令的作用是以冒号":“作为分隔.输出第1个,第7个区域的字符串。其中的“-F”部分用来指定分隔符号(未指定时,默认以空格或制表符分隔)。关于awk命令的更多用法,在后面的章节中再做详细介绍,本章不做过多讲解。 又如,若要提取根分区(/)的磁盘使用率信息,可以执行以下操作,其中用到了df、grep.awk命令和管道操作。
现在我们使用刚刚所学的查找出根目录下的CPU利用率
[root@localhost ~] df -hT | grep "/$"
/dev/mapper/cl-root xfs 17G 2.2G 15G 13% /
[root@localhost ~] df -hT | grep "/$" | awk '{print $6}'
13%