【shell 编程大全】内容格式化以及多样化输出

内容格式化以及多样化输出

1. 前倾回顾

本章节我们一起来学习下,shell中内容格式化,以及多样输出。但是在学习之前,我们先来看看上个章节【shell 变量的定义以及使用】 我们都学习到了什么知识

shell 变量的定义以及使用

  • 变量分类
  • 变量定义
  • 类型变量定义
  • 移除变量
  • 单引号以及双引号区分
  • 命令变量
  • 全局变量
  • 变量作用范围
  • 内置变量

2. 内容格式化

2.1 重定向

我们可以通过重定向的形式将命令中的内容输出到文件中,但是输出的格式大致分为2种

  • 覆盖性
  • 追加性

覆盖方式

以符号> 表示将内容直接覆盖

[root@localhost day04]# ll | grep test002
[root@localhost day04]# echo 1111 > test002.md
[root@localhost day04]# cat test002.md 
1111
[root@localhost day04]# echo 222 > test002.md 
[root@localhost day04]# cat test002.md 
222
[root@localhost day04]# 

追加方式

以符号>> 表示将内容直接追加

[root@localhost day04]# cat test002.md 
222
[root@localhost day04]# echo 333 >> test002.md 
[root@localhost day04]# cat test002.md 
222
333
[root@localhost day04]# 

2.2 管道符

使用符号| 表示管道符,将左侧命令的结果,传递给右侧的命令来使用

例如

[root@localhost day04]# env | grep -wi home
HOME=/root

2.3 后台执行

什么叫后台执行呢? 比如命令sleep 3. 此命令一直会阻塞其余命令执行。所以我们想让其在后台执行,那应该怎么做呢。

命令尾部 添加符号& 表示此命令后台执行

例如

[root@localhost day04]# sleep 4 &
[1] 2484
[root@localhost day04]# 

2.4 信息符号

什么叫信息符号呢?? 表示正确的信息,错误的信息 以及所有的消息

  • 正确的信息 1>>
  • 错误的信息 2>>
  • 错误以及正确的信息 2>&1

案例1

[root@localhost day04]# cat test002.md 1>> normalFile
[root@localhost day04]# cat normalFile 
222
333
[root@localhost day04]# sdfdsf 2>> errFile
[root@localhost day04]# cat errFile 
-bash: sdfdsf: command not found
[root@localhost day04]# 

案例2

/bin/bash ./ceshi.sh 1>> ceshi_info 2>> ceshi_err

[root@localhost day04]# cat ceshi.sh 
#!/bin/bash

echo "下一条是错误的命令"

sdfsdfds
[root@localhost day04]# /bin/bash ./ceshi.sh 1>> ceshi_info 2>> ceshi_err
[root@localhost day04]# cat ceshi_info
下一条是错误的命令
[root@localhost day04]# cat ceshi_err 
./ceshi.sh: line 5: sdfsdfds: command not found
[root@localhost day04]# 

案例3

[root@localhost ~]# /bin/bash ceshi.sh >> ceshi-all 2>&1
[root@localhost ~]# cat ceshi-all
下一条错误命令
ceshi.sh:行5: dsfsafsafdsa: 未找到命令

3. 输入格式化

什么叫输入的格式化呢,其实就是可以多行输入,输入啥就是就是啥。 可以像在文本种一样在命令行种输入

3.1 EOF原理

eof

[root@localhost day04]# cat << eof
>  sfsdf sf s
> s fdds s
>       sdfsdfs
> eof
 sfsdf sf s
s fdds s
      sdfsdfs
[root@localhost day04]# 

3.2 cat 实践

实现多行文本的输出

在这里插入图片描述

cat > normalfile << eof 将eof中内容赋值给cat, cat将内容以覆盖的形式保存到文件normalfile中

[root@localhost day04]# cat > normalfile << eof
>   这是一个请假条
> 一个很好的请教条
> 这个请假条就是为了请假的
> eof
[root@localhost day04]# cat normalfile
  这是一个请假条
一个很好的请教条
这个请假条就是为了请假的

3.3 tee 实践

tee命令读取标准输入,把这些内容同时输出到标准输出和(多个)文件中,tee命令可以重定向标准输出到多个文件。要注意的是:在使用管道线时,前一个命令的标准错误输出不会被tee读取。

命令格式

样式1:只输出到标准输出
	tee
样式2:输出到标准输出的同时,保存到文件file中
	tee file
样式3:输出到标准输出的同时,追加到文件file中。如果文件不存在则创建;如果文件存在则追加。
	tee -a file
	tee host2 <<- EOF ... EOF
样式4: 输出到标准输出两次。
	tee -
样式5:输出到标准输出两次,同时保存到file1和file2中。
	tee file1 file2 -

案例

输出到命令行的同时 && 输出到文件中

[root@localhost day04]# echo test-tee | tee
test-tee
[root@localhost day04]# echo test-tee | tee test003.md
test-tee
[root@localhost day04]# cat test003.md 
test-tee
[root@localhost day04]# 

相同的内容 多次输出

[root@localhost day04]# echo test-tee | tee
test-tee
[root@localhost day04]# echo test-tee | tee -
test-tee
test-tee
[root@localhost day04]# echo test-tee | tee - -
test-tee
test-tee
test-tee
[root@localhost day04]# 

4. 格式化输出

4.1 echo 解读

格式

OPTIONS:
-n	不要在最后自动换行
-e	若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

转义字符
\a		发出警告声;
\b		删除前一个字符;
\c		最后不加上换行符号;
\f		换行但光标仍旧停留在原来的位置;
\n		换行且光标移至行首;
\r		光标移至行首,但不换行;
\t		插入tab;
\v		与\f相同;
\		插入\字符;
\0nnn	打印nnn(八进制)所代表的ASCII字符;  备注:数字0  不要理解成字母o
\xNN  	打印NN(十六进制)所代表的ASCII字符;

不换行输出

[root@localhost day04]# echo -n 11; echo 22
1122
[root@localhost day04]# 

转义

[root@localhost day04]# echo -e "aa\nbb"
aa
bb
[root@localhost day04]# echo "aa\nbb"
aa\nbb
[root@localhost day04]# 

4.2 颜色输出

格式

格式如下:
	echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
	echo -e "\033[41;36m 显示的内容 \033[0m"

在这里插入图片描述

4.3 颜色分类

色彩绿
字体色3031323334353637
背景色4041424344454647

4.4 printf格式化

虽然我们能够通过 echo的方式实现信息某种程度的格式化输出,但是很多信息的输出偏重于手工的干预,效率太慢。我们需要一种功能更强大、效率更高的格式化手段。
– printf

语法格式

查看帮助
[root@localhost ~]# help printf
printf: printf [-v var] 格式 [参数]

在这里插入图片描述

```bash
格式化替换符
    %s 		字符串
    %d,%i 	十进制整数
    %f 		浮点格式
    %c 		ASCII字符,即显示对应参数的第一个字符
    %b 		相对应的参数中包含转义字符时,可以使用此替换符进行替换,对应的转义字符会被转义
    %o 		八进制值
    %u 		不带正负号的十进制值
    %x 		十六进制值(a-f)
    %X 		十六进制值(A-F)
    %% 		表示%本身

虽然上述参数很多 但是其实我们自己用到的并不多。%s, %d, %i, %f, $$

格式化字符解释
–		将字段里已格式化的值向左对齐
空格	   在正值前置一个空格,在负值前置一个负号
+		总是在数值之前放置一个正号或负号,即便是正值也是
#		下列形式选择其一:
			%o有一个前置的o;					%x与%X分别前置的0x与0X;
			%e,%E与%f总是在结果中有一个小数点;  %g与%G为没有结尾的零。
0		以零填补输出,而非空白.这仅发生在字段宽度大于转换后的情况

案例1:添加换行

[root@localhost day04]# echo "test1"
test1
[root@localhost day04]# printf "test1"
test1[root@localhost day04]# 
[root@localhost day04]# printf "test1\n"
test1
[root@localhost day04]# 

案例2:替换符号

[root@localhost day04]# printf "姓名:%s, 年龄:%d, 身高:%f\n" lihh 20 180.1
姓名:lihh, 年龄:20, 身高:180.100000
[root@localhost day04]# 

上述符号%s, %d, %f 都素hi待替换的占位符。

案例3:显示%f 小数点个数

[root@localhost day04]# printf "姓名:%s, 年龄:%d, 身高:%.1f\n" lihh 20 180.1
姓名:lihh, 年龄:20, 身高:180.1
[root@localhost day04]# 

案例4:显示指定宽度 并左对齐

[root@localhost day04]# printf "姓名:%-10s, 年龄:%-10d, 身高:%-10.1f\n" lihh 20 180.1
姓名:lihh      , 年龄:20        , 身高:180.1     
[root@localhost day04]# 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值