shell脚本0——”一切皆文件“, 认识Shell
一、”一切皆文件“与“管道”
1)管道:grep foo /path/to/file | grep -n -k 3 | more
实际过程与我们直观认为的相反,最好通过实际过程理解。首先运行的是more,它的输入被连接至一个管道。然后是sort,并且其输出被连接至之前的那个管道。接着创建第二个管道,并且将sort的stdin连接至该管道。最后执行grep,将其stdout连接至与sort进程相连的那个管道。
当grep开始运行并输出数据时,数据顺着管道流向sort,sort处理后顺着管道输出到more,由more对管道输出的全部内容进行分页输出。在由错误的情况下,这样的过程会有不同的行为,more有错误,不会有任何事情发生,若grep键入错误,则more和sort会执行到错误被检测出来。
2)管道的存在使得系统中的工具在编写时假设它们处理的是文本流。”一切皆文件“的概念与4种可执行的文件操作(opne close read write)意味着Unix实际上使用了一种简洁明了的系统设计方法。shell脚本本身也是文本形式的系统实用程序。
二、开始一个shell脚本
1)用户登录的shell程序就是一个设立了程序解释器,解释执行shell脚本;
通常在shell程序的首行指明shell程序采用哪个解释器来执行它,格式为:#!/bin/bash,若没有指明,用当前登陆shell来解释执行,echo $SHELL可以查看登陆的shell程序
2)执行:chmod +x 然后./执行 或者bash *.sh
3)以#开头的行为注释行
三、认识shell
LINUX是一个操作系统,它在CPU、磁盘驱动器、内存、监视器、键盘和其他硬件之间起调节作用。(非图形界面时)当你看那UNIX屏幕时,实际上并没有见到UNIX,只是见到由该操作系统运行的一个程序,它对键盘进行监控并作出相应,这个程序就被称作注册Shell(Login Shell)。
bash 启动新的shell命令
exit 退出
echo $SHLVL
注1:
开头的空格被忽略,缩进只是为了好看
\ 字符让shell忽略换行符, 用于换行接续命令
# 注释,可用在行首、行尾
#!/bin/bash 脚本开头
Shell程序设计:
差不多总是用来使任务自动化。Shell与用户交互的工具非常少,至多可以问用户一个问题和接收一个文本答复,需要用户交互时应使用性能更全面的语言
Shell特性:
别名alias;
命令替换:倒引号(`)把一个命令的输出合并到另一个命令中;
后台处理:(不需要提供输入) find / -name “hello” -print > find.log & ;
变量;
管道(pipe):把一个命令的输出连接到另一个命令的输入。
重定向(redirection):可以改变程序的输入来源和程序的输出地点
模式匹配: ls *.py
特殊字符:
“ 使shell无法认出大多数特殊字符(除去$ `)
‘ 使shell无法认出所有特殊字符
`命令替换
\跟在反斜杠之后的字符就失去其特殊含义
;使一行上放多个命令
&后台
()创建组命令
{}用来创建Shell过程的命令块
|管道
<>&重定向
*?[]!用于文件名模式匹配
$引用变量名开头
#注释
空格 制表符 换行符 通称空白符用于分隔Shell命令中的词
shell脚本0——”一切皆文件“, 认识Shell的更多相关文章
- Shell脚本使用汇总整理——文件夹及子文件备份脚本
Shell脚本使用汇总整理——文件夹及子文件备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/9223477.html ...
- [linux] shell脚本编程-统计日志文件中的设备号发通知邮件
1.日志文件列表 比如:/data1/logs/2019/08/15/ 10.1.1.1.log.gz 10.1.1.2.log.gz 2.统计日志中的某关键字shell脚本 zcat *.gz|gr ...
- Shell脚本对Linux进行文件校验
Shell脚本对Linux进行文件校验 一.需求 有客户等保需求对文件一致性进行校验,想到利用md5sum工具,因此写脚本来对文件进行自定义扫描,后期可以利用其进行校验,快速校验文件发现变更的文件,一 ...
- 如何使用shell脚本快速排序和去重文件数据
前面写过一篇通过shell脚本去重10G数据的文章,见<用几条shell命令快速去重10G数据>.然而今天又碰到另外一个业务,业务复杂度比上次的单纯去重要复杂很多.找了很久没有找到相应的办 ...
- Centos7下crontab+shell脚本定期自动删除文件
问题描述: 最近有个需求,就是rsync每次同步的数据量很多,但是需要保留的数据库bak文件 保留7天就够了,所以需要自动清理文件夹内的bak文件 解决方案: 利用shell脚本来定期删除文件夹内的任 ...
- shell脚本实现读取一个文件中的某一列,并进行循环处理
shell脚本实现读取一个文件中的某一列,并进行循环处理 1) for循环 #!bin/bash if [ ! -f "userlist.txt" ]; then echo &qu ...
- [ Shell ] 通过 Shell 脚本导出 GDSII/OASIS 文件
https://www.cnblogs.com/yeungchie/ 常见的集成电路版图数据库文件格式有 GDSII 和 OASIS,virtuoso 提供了下面两个工具用来在 Shell 中导出版图 ...
- centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课
centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 ...
- shell脚本:变量,文件判断,逻辑运算等纪要
shell脚本中的变量定义,引用各有不同的方式,除此之外,很常用的有文件属性判断,逻辑运算,数值运算等,下面记录一下它们的属性作用 变量 shell变量的定义分为两种:一种是直接赋值定义,另一种是嵌套 ...
随机推荐
- Python开发【第五篇】字符串
字符串 作用:用来记录文字信息 例子: 空字符串 '' #单引号空字符串 "" #双引号空字符串 ''' ''' #三单引号空字符串 """ &quo ...
- 问题:LinkedList 是原始类型。应该将对通用类型 LinkedList<E> 的引用参数化
jdk1.5之后,引入了泛型,类似下面这种写法会出现类似警告,可以忽略, LinkedList llist = new LinkedList();也可以修改一下,指定类型 LinkedList&l ...
- tinyxml2
网上下载tinyxml2:tinyxml2.h和tinyxml2.cpp 加载xml XMLDocument doc; doc.LoadFile("test.xml"); ...
- 概念理解:boost::asio::io_service
IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象). asio::io_service i ...
- 【Java必修课】各种集合类的合并(数组、List、Set、Map)
1 介绍 集合类可谓是学习必知.编程必用.面试必会的,而且集合的操作十分重要:本文主要讲解如何合并集合类,如合并两个数组,合并两个List等.通过例子讲解几种不同的方法,有JDK原生的方法,还有使用第 ...
- 06 python学习笔记-常用模块(六)
一. 模块.包 1.什么是模块? Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句,是用来组织代码的.模块能定义函数 ...
- kafka里的一些管理脚本
kafka-server-start脚本 ------启动kafka server kafka-server-stop脚本 ------关闭kafka server kafka-topics脚本 -- ...
- Web购物车案例(servlet+bean+jsp)
一些B话 事情来得太突然,一个朋友说是要我帮忙做一个JavaWeb的课程设计,在过一天就要去答辩了- 这我哪受的了时间这么短还没有~~~,正准备委婉的拒绝的时候他说写完之后给我那个啥- 好吧,我就是这 ...
- Java 读取properties 配置文件的几种方式
基于ClassLoder读取配置文件 Properties properties = new Properties(); // 使用ClassLoader加载properties配置文件生成对应的输入 ...
- data-*设置自定义属性注意事项一
本人才疏学浅,偶遇一个data自定义属性应当注意的小问题,随笔记下. 1.看下面代码:首先在a标签设置自定义两个属性 <a class="btn" href="ja ...