1 常用符号解读
1.1 信息传递
重定向
重定向符号
在shell脚本中有两类常见的重定向符号:
覆盖式重定向:
> 表示将符号左侧的内容,以覆盖的方式输入到右侧文件中
< 表示将符号右侧的内容,以覆盖的方式输入到左侧文件中
追加式重定向:
>> 表示将符号左侧的内容,以追加的方式输入到右侧文件的末尾行中
<< 表示将符号右侧的内容,以追加的方式输入到左侧文件的末尾行中
实践1 - 覆盖式重定向
查看文件内容
[root@localhost ~]# cat file.txt
nihao
使用重定向符号给文件中增加内容
[root@localhost ~]# echo "file1.txt" > file.txt
再次查看文件内容
[root@localhost ~]# cat file.txt
file1.txt
实践2 - 追加式重定向
查看文件内容
[root@localhost ~]# cat file.txt
file1.txt
使用重定向符号给文件中增加内容
[root@localhost ~]# echo "file2.txt" >> file.txt
再次查看文件内容
[root@localhost ~]# cat file.txt
file1.txt
file2.txt
管道符
符号简介
| 这个就是管道符,常用于将两个命令隔开,然后命令间(从左向右)传递信息使用的。
使用格式
命令1 | 命令2
管道符左侧命令1 执行后的结果,传递给管道符右侧的命令2使用
实践1 - 信息的传递
查看当前系统中的全局变量SHELL
[root@localhost ~]# env | grep SHELL
SHELL=/bin/bash
1.2 终端输出
后台执行
简介
& 就是将一个命令从前台转到后台执行,使用格式如下:
命令 &
简单演示
前台执行休眠命令
[root@localhost ~]# sleep 4
界面卡住4秒后消失
后台执行休眠命令
[root@localhost ~]# sleep 10 &
[1] 4198
[root@localhost ~]# ps aux | grep sleep
root 4198 0.0 0.0 9032 808 pts/17 S 21:58 0:00 sleep 10
root 4200 0.0 0.0 15964 944 pts/17 S+ 21:58 0:00 grep --color=auto sleep
信息符号
信息简介
1 表示正确输出的信息
2 表示错误输出的信息
2>&1 代表所有输出的信息,也可以简写为 "&>"
示例1 - 符号演示
标准正确输出重定向到zhengque文件
[root@localhost ~]# cat nihao.txt 1>> zhengque
标准错误输出重定向到errfile文件
[root@localhost ~]# dsfadsfadsfa 2>> errfile
实例2 - 综合演练
脚本文件内容
[root@localhost ~]# cat ceshi.sh
#!/bin/bash
# 输出正确信息
echo '下一条错误命令'
# 执行错误命令,输出错误信息
dsfsafsafdsa
脚本执行效果
[root@localhost ~]# /bin/bash ceshi.sh
下一条错误命令
ceshi.sh:行5: dsfsafsafdsa: 未找到命令
1 和 2 综合演练
[root@localhost ~]# /bin/bash ceshi.sh 1>> ceshi-ok 2>> ceshi-err
[root@localhost ~]# cat ceshi-ok
下一条错误命令
[root@localhost ~]# cat ceshi-err
ceshi.sh:行5: dsfsafsafdsa: 未找到命令
全部信息演练
[root@localhost ~]# /bin/bash ceshi.sh >> ceshi-all 2>&1
[root@localhost ~]# cat ceshi-all
下一条错误命令
ceshi.sh:行5: dsfsafsafdsa: 未找到命令
2 输入格式化
2.1 EOF原理
场景需求
在运维岗位中,有非常多的场景需要我们在脚本中编写应用软件的配置文件。
在这些应用软件的配置文件中,经常携带大量的格式,尤其是携带空格的层级格式,
如果我们一个一个的编写好标准的配置文件,但是一旦涉及到场景信息的动态化调整,
固定好的配置文件就不太适合了,所以我们需要一种方法能够实现整个动态的格式化需求。
解决方法
在shell编程中,"EOF”通常与"<<”结合使用,"<<EOF”表示后续的输入作为子命令或子shell的输入,
直到遇到"EOF”,再次返回到主调用shell,可将其理解为分界符(delimiter)。
所谓的 EOF,就是End Of File的缩写,它是一种自定义的文件内容终止符。
既然是分界符,那么形式自然不是固定的,这里可以将”EOF"可以进行自定义,
但是前后的”EOF"必须成对出现且不能和shell命令冲突。其使用形式如下:
语法格式
交互式程序 << EOF
command1
command2
...
EOF
注意:
最后的"EOF"必须单独占一行,而且必须顶格写,如果不想受到如此限制的话,使用<<-符号
<