bash脚本基础
1.bash特性之命令补全与路径补全
命令补全:敲击Tab按键
shell程序在接收到用户执行命令的请求且分析完成后,最左侧字符串将被当作命令去分析$PATH标量所指定的各路径下去查找
查找机制:
1.查找内部命令
2.查找外部命令:去$PATH变量下所指定的各路径下,自左而右逐个搜索各目录下的文件名:打头的字符串如果能唯一标识,则直接补全;不能唯一标识,在敲击一次Tab按键,可给出列表;
3.错误:没有任何命令被识别,则无响应
路径补全:
在给定的起始路径的上级目录下,以对应路径下的打头字符串来逐一匹配上级目录下的每个文件
2.bash特性之命令行展开
把命令行给定的特殊符号自动转化为相应的字符串的机制
例:
“~”
:自动切换为家目录
“~ username”
:切换到指定用户的家目录
“{}”
:可承载一个以逗号分割的路径列表,能够将其展开为多个独立的路径
#批量创建空文件夹
mkdir /tmp/{x,y,z} = mkdir /tmp/x /tmp/y /tmp/z
mkdir /tmp/{x/y,m/{m,n}} = mkdir /tmp/x/y /tmp/m/m /tmp/m/n
mkdir /tmp/{x,y}/z = mkdir /tmp/x/z /tmp/y/z
3.bash的特性:命令执行的状态结果
命令的正常输出结果,叫做命令的返回值
命令执行的状态结果:成功,失败
bash用一特殊变量来保存最接近一次的命令执行状态结果:“$?”
echo $? #显示命令执行的结果
显示的结果中,0
表示命令执行成功,1-255
表示没有成功
命令的输出结果通过引用来保存下来或直接调用,例如:
mkdir -v `echo $?`
结果是创建以相应数字为文件名的空文件夹
使用“ `` ”(反引号)
"''"(引号):强引用
""""(双引号):弱引用
"``"(反引号):命令引用
4.bash的特性之glob通配符
glob:文件名通配符,能够快速引用多个文件,只指文件名,不包括路径
、文件名匹配度检测
元字符:基于元字符可编写匹配模式(pattern)
"*"(米字符):匹配任意长度的任意字符
例:
p* :以p开头的任意字符串,文件名。。。
pa*:以pa开头的
*p:以p结尾的
- p *a:中间有p,结尾为a的
"?"(问号):匹配任意单个字符
例:
p?a:代表三个字符,其中中间的为任意字符
p?两个字符
p??,三个字符
“[ ]”(中括号):匹配指定集合内的任意单个字符
例:[a-z],[A-Z]:此时不区分大小写
[0-9]:
[a-z0-9]:字母与数字
[[:upper:],[A-Z]]:所有大写字母,只显示大写
[[:lower:]],只显示小写
[[:digit:]]
[[:alpha:]]
[[:alnum:]]
[[:space:]]
[[:punct:]]
[]:匹配指定集合外的任意单个字符,如[[:alpha:]]
5.bash特性之变量
程序=指令+数据
数据:文件、变量
变量:内存空间,有名称,名称即为变量
变量赋值:NAME=VALUE
=:为赋值符号,把VALUE存储到NAME指向的内存空间中
变量命名:只能使用字母、数字和下划线;而且不能以数字开头;
变量引用:${NAME}, $NAME
变量替换:把变量引用符号出现的位置替换为其指向的内存空间中的数据;
bash变量种类:
1.本地变量:作用域为当前shell进程;不包括其子进程;
2.环境变量:使用域为当前shell进程及其子进程;
3.局部变量:作用域:生效范围,也即可引用到的范围;
4.位置参数变量
5.特殊变量
6.bash特性之IO重定向
1.输出重定向:重定向程序正常执行的结果
COMMAND > /PATH/TO/SOMEFILE
覆盖重定向:覆盖目标文件中的原有内容;
COMMAND >> /PATH/TO/SOMEFILE
追加重定向:追加新产生的内容至目标文件尾部;
shell的一个功能开关:
set -C:禁止覆盖输出从定向至已存在的文件
注意:此时仍然可以使用“>|”至目标文件
set +C:关闭上述特性
2.错误重定向:重定向错误的执行结果
COMMAND 2> /PATH/TO/SOMEFILE
错误输出覆盖重定向;
COMMAND 2>> /PATH/TO/SOMEFILE
错误输出追加重定向;
3.合并标准输出与错误输出流
1.&>,&>>
2.command > /path/to/somefile 2>&1
3.command >> /path/to/somefile 2>&1
4.特殊设备
1.特殊输出目标:/dev/null,垃圾桶
2.特殊的输出文件:/dev/zero
5.输入重定向
COMMAND < /PATH/FROM/SOMEFILE
7.bash特性之管道
COMMAND1 | COMMAND2 | COMMAND3 | ...
练习:
1.把/etc/passwd文件最后三行信息中所有小写字符改为大写后输出
cat /etc/passwd | tr 'a-z' 'A-Z'
2.取出/etc/fstab的第六行
head -n 6 /etc/fstab | tail 1
3.取出/etc目录下所有以p开头的文件或目录,只显示前5个
ls -a /etc/p* | head 5
特殊命令:
1.tee命令:
tee [OPTION]... [FILE]...
-a:使用追加输出,而非覆盖
COMMAND | tee /PATH/TO/SOMEFILE
例:
ls -al /tmp | tee -a /tmp/bashrc
列出/tmp下的文件,并把结果追加导入到/tmp/bashrc文件中
2.tr命令:
tr [option] set1 [set2]
把输出的数据当中的字符,实现对位转换,即把数据中的存在于字符集中的字符,统统转换为字符几种对未的字符;
1.tr set1 set2 < /path/from/somefile #字符转换
2.tr -d set1 < /path/to/somefile #删除
bash脚本基础的更多相关文章
- -Shell 教程 Bash 脚本 基础语法 MD
目录 目录 Shell 简介 Shell 脚本 Shell 环境 第一个shell脚本 Shell 变量 定义变量 使用变量 只读变量 删除变量 Shell 字符串 单引号 双引号 字符串基本操作 S ...
- bash shell笔记1 脚本基础知识
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...
- Bash脚本编程之脚本基础和bash配置文件
脚本基础 参考资料:Shell Scripts (Bash Reference Manual) 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成 ...
- Bash脚本编程基础
为实现某个任务,将许多命令组合后,写入一个可执行的文本文件的方法,称为Shell脚本编程. 按照应用的Shell环境不同,可以将Shell脚本分为多种类型.其中最常见的是应用于Bash和Tcsh的脚本 ...
- bash脚本编写基础
bash脚本编程 命令的堆砌 脚本程序:解释器解析执行 shell:交互式接口,编程环境 shell:能够提供一些内部命令,并且能通过PATH环境变量找到外部命 ...
- linux学习18 shell脚本基础-bash变量和逻辑运行
一.回顾 1.用户管理,权限管理,install,mktemp 2.用户管理: 3.权限管理: mode,ownership mode: user group other r w x 4.命令:ins ...
- Bash脚本实现批量作业并行化
http://jerkwin.github.io/2013/12/14/Bash%E8%84%9A%E6%9C%AC%E5%AE%9E%E7%8E%B0%E6%89%B9%E9%87%8F%E4%BD ...
- 【转】Bash脚本实现批量作业并行化
首先附上自己常用的代码 ---------------------------------------------------------------------------------------- ...
- Bash脚本编写初体验
上周例会的时候,冷不丁的接到了维护原有的安装脚本和编写升级.卸载脚本的任务,PM和几个同事一本正经的说,一天甚至30分钟就可以精通shell脚本编写,哪怕没有语言基础也可以. 当然,作为有着C++.P ...
随机推荐
- leetcode算法题(JavaScript实现)
题外话 刷了一段时间的codewars的JavaScript题目之后,它给我最大的感受就是,会帮助你迅速的提升你希望练习的语言的API的熟悉程度,Array对象.String对象等原生方法,构造函数. ...
- Android面试题目2
1. 请描述下Activity的声明周期. onCreate->onStart->onRemuse->onPause->onStop->onRestart->onD ...
- Xamarin开发笔记—百度在线语音合成
语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的.或外部输入的文字信息转变为可以听得懂的.流利的口语输出的技术. 技术选型:语音合成初步选择有两个,一是讯飞.二是百度. 因为使用的是X ...
- java加密算法入门(一)-算法概念及单向加密
说起加密,我的第一印象就是电视剧各种密码本破解解密的场景,这两天在看加密相关的东西,做下笔记以便以后查看,也提供给大家个参考. 本文是java加密的第一篇,主要讲述下消息编码Base64以及简单的消息 ...
- 用 Hexo + Github 搭建自己的博客
扯在前面 在很久很久以前,一直就想搭建属于自己的一个博客,但由于各种原因,最终都不了了之,恰好最近突然有了兴趣,于是就自己参照网上的教程,搭建了属于自己的博客. 至于为什么要搭建自己的博客了?哈哈,大 ...
- webpack 插件拾趣 (1) —— webpack-dev-server
结束了一季的忙碌,我这封笔已久的博客也终究该从春困的咒印中复苏,想来写些实用易读的作为开篇,自然是最好不过. 新开个 webpack 插件/工具介绍的文章系列,约莫每周更新一篇篇幅适中的文章聊以共勉, ...
- mac os 安装PIP 及异常“”Can't install python module: PyCharm Error: “byte-compiling is disabled, skipping”“”的解决方案
For all who have the same problem, it took me a while to find the solution in a new installation of ...
- Scrapyd部署爬虫
Scrapyd部署爬虫 准备工作 安装scrapyd: pip install scrapyd 安装scrapyd-client : pip install scrapyd-client 安装curl ...
- phpcms和php格式化时间戳
用PHPCMS V9 建站时,经常会用到时间标签,它是通用标签调用-日期时间格式化,适用全站. 一.日期时间格式化显示: a\标准型:{date('Y-m-d H:i:s', $rs['inputti ...
- Swift初始化空字符串
为了构造一个很长的字符串,可以创建一个空字符串作为初始值.可以将空的字符串字面量赋值给变量,也可以初始化一个新的String 实例: var emptyString = "" // ...