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变量的定义分为两种:一种是直接赋值定义,另一种是嵌套 ...
随机推荐
- JavaScript如何工作:垃圾回收机制 + 常见的4种内存泄漏
原文地址: How JavaScript works: memory management + how to handle 4 common memory leaks 本文永久链接:https://d ...
- ESP8266开发之旅 网络篇⑩ UDP服务
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- python模块的导入详解
一:一个小问题:什么是模块? 我的理解是:有通用功能的文件的集合. 二:为什么要使用模块? 我们通常为了使自己以前写的东西保存下来,会把东西写入文件中保存下来,必要时我们把这些文件当脚本去执行,也可以 ...
- 两种unity双击事件
有时候需要用到双击事件,而unity未提供双击控件,在此提供两种双击事件方法,进攻参考: 1)此方法为通过unityevent来实现 首先新建image(或其他不带点击事件的控件),添加如下脚本,然后 ...
- Nexus 离线更新中央仓库索引
nexus可以在线更新中央仓库索引,但是更新速度慢,而且很有可能下载的索引不全.下面介绍一种离线更新中央仓库索引的方式,速度快并且可靠. 1.访问http://repo.maven.apache.or ...
- NodeJs 实现 WebSocket 即时通讯(版本一)
服务端代码 var ws = require("nodejs-websocket"); console.log("开始建立连接...") var game1 = ...
- u检验粗浅理解
假设检验是以小概率事件,在一次实验中是不可能发生为前提(事实上是有可能发生的,但不是这样说的话,就落入一个圈,不能继续玩了),来否认原假设. u检验的定义: 已知从正态母体N(u,σ2)中抽得容量为n ...
- 学习笔记53_C#操作MongoDB
1.配置MongoDB的连接字符串 MongoDB程序集引用 在使用db.GetCollerction<T>,也可以不指定类,因为Mongodb是无模式的. ****关系型数据设计转化为j ...
- fastjson自由:controller上指定active profile,让你想序列化什么字段就序列化什么字段
一.前言 最近有个需求,其实这个需求以前就有,比如定义了一个vo,包含了10个字段, 在接口A里,要返回全部字段: 但是在接口B里呢,需要复用这个 vo, 但是只需要返回其中8个字段. 可能呢,有些同 ...
- 关于多线程start()方法原理解读
1.为什么启动线程不用run()方法而是使用start()方法 run()方法只是一个类中的普通方法,调用run方法跟调用普通方法一样 而start()是创建线程等一系列工作,然后自己调用run里面的 ...