学习shell的第二天
2024-09-03 08:03:52
重定向和管道符:
1、重定向
程序 = 指令 + 数据
命令 变量
程序 = 指令 + 数据
命令 变量
在程序中,数据如何输入?又如何输出?
数据输入:键盘 -- 标准输入,但是并不是唯一输入方式;
--stdin
echo "123456" | passwd --stdin "username"
数据输入:键盘 -- 标准输入,但是并不是唯一输入方式;
--stdin
echo "123456" | passwd --stdin "username"
例如:功能添加用户 useradd.sh user.txt文本文档1000个用户
./useradd.sh a
./useradd.sh b
...
./useradd.sh < user.txt
while line ; do
循环体 $line
done < /etc/passwd
数据输出: 显示器 -- 标准输出,但是并不是唯一输出方式
ls /etc/ > a.txt
./useradd.sh a
./useradd.sh b
...
./useradd.sh < user.txt
while line ; do
循环体 $line
done < /etc/passwd
数据输出: 显示器 -- 标准输出,但是并不是唯一输出方式
ls /etc/ > a.txt
fd 文件标识符 0-9 -- 相当于给文件分类;
0 1 2
0 -- 标准输出
1 -- 标准输入
2 -- 错误输入输出(标准错误)
0 1 2
0 -- 标准输出
1 -- 标准输入
2 -- 错误输入输出(标准错误)
常见重定向符号
1、标准输出
> 覆盖重定向、非常危险
set -C 关闭覆盖重定向功能
>| 强制重定向
>> 追加重定向
不覆盖
2、标准输入
< tr 替换文件内容
tr set1 [set2] < file.txt
<< 将多行数据同时输入
cat >>a.txt<<EOF
>1
>2
>3
>EOF
3、错误输出
2> 2>>
扩展:不需要输出内容,只需要输出状态;
ls /etc/ > /dev/null 2> /dev/null
echo $? ($?--变量:上一条命令的执行状态)
if $?等于0;么?
OK--干!
否则
不
结束
1、标准输出
> 覆盖重定向、非常危险
set -C 关闭覆盖重定向功能
>| 强制重定向
>> 追加重定向
不覆盖
2、标准输入
< tr 替换文件内容
tr set1 [set2] < file.txt
<< 将多行数据同时输入
cat >>a.txt<<EOF
>1
>2
>3
>EOF
3、错误输出
2> 2>>
扩展:不需要输出内容,只需要输出状态;
ls /etc/ > /dev/null 2> /dev/null
echo $? ($?--变量:上一条命令的执行状态)
if $?等于0;么?
OK--干!
否则
不
结束
ls 暗室逢灯 > /dev/null 2> /dev/null
/dev/null 黑洞文件 来什么吃什么(删除)
/dev/zero 吹泡泡
&> &>> == 2&>1
ls /etc/ &> /dev/null
/dev/null 黑洞文件 来什么吃什么(删除)
/dev/zero 吹泡泡
&> &>> == 2&>1
ls /etc/ &> /dev/null
2、管道 - tee
command1 | command2 | command3 | ... ...
前一个命令的执行结果交给后一个命令来执行;
【Linux思想:结合小功能实现大功能】
free -m | grep "^Mem" | cut -d' ' -f19
free -m | grep "^Mem" | awk '{print $3}'
前一个命令的执行结果交给后一个命令来执行;
【Linux思想:结合小功能实现大功能】
free -m | grep "^Mem" | cut -d' ' -f19
free -m | grep "^Mem" | awk '{print $3}'
tee 一路输入,两路输出
tee /tmp/tee.out
如果没有文件,会创建,默认如果文件存在有内容,会覆盖;
tee /tmp/tee.out
如果没有文件,会创建,默认如果文件存在有内容,会覆盖;
练习:
将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;
head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out
将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;
head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out
将登录至当前系统上用户信息汇总的后3位信息转换为大写后保存至/tmp/who.out文件中;
who | tail -3 | cut -d' ' -f1 | tr [[:lower:]] [[:upper:]] | tee /tmp/who.out
who | tail -3 | cut -d' ' -f1 | tr [[:lower:]] [[:upper:]] | tee /tmp/who.out
tail 查看文件尾部多少行(默认10行)
-n tail -n 5 /etc/passwd == 简写 tail -5 /etc/passwd
-f 实时查看文件更新内容
tail -f /var/log/message
head 查看文件头部多少行(默认时行)
-n # 前#行, 简写 -#
取 10 - 20 行: head -20 /etc/passwd | tail -10
-n tail -n 5 /etc/passwd == 简写 tail -5 /etc/passwd
-f 实时查看文件更新内容
tail -f /var/log/message
head 查看文件头部多少行(默认时行)
-n # 前#行, 简写 -#
取 10 - 20 行: head -20 /etc/passwd | tail -10
tar 压缩
tr 替换
cut 切
tr 替换
cut 切
最新文章
- Cannot find or open the PDB file问题的解决
- Spring-JDBC实现Contact的CRUD
- 常见面试问题 - Useful Links
- KVM 基础使用(一)
- thinkphp 3.2 单入口 多模块 不能加载index控制器问题
- 对于C#中的一些点滴你真的理解了吗?
- Java中ArrayList和LinkedList区别
- iOS App Transport Security
- linux下实现tomcat定时自动重启
- PuTTY DSA签名远程缓冲区溢出漏洞(CVE-2013-4207)
- 全局获取Context的技巧
- Linux内核中的宏:__init and __exit
- 将电脑文件复制到vm虚拟机中,然后安装步骤
- 玩转接口测试工具fiddler 教程系列1
- Linux问题杂谈
- qq远程连接/windows远程桌面/teamviwer/xmanager/vnc的区别
- GPUImage API 文档之GPUImageFilter类
- Java编程的逻辑 (30) - 剖析StringBuilder
- Redmine插件的安装与卸载,知识库插件安装。
- 基于Axis1.4的webservice接口开发(环境搭建)