bash shell学习-shell基础 (笔记)
When you hoist the sails to cross the sea, you willride the wind and cleave the waves.
"长风破浪会有时,直挂云帆济沧海"
一、认识shell
1、什么是shell
shell是一种“提供使用者界面”来实现用户与内核通信的软件(命令解释器)
2、为什么要学习shell
①命令行界面的shell在各大Linux发行版中都一样;
②远程管理时命令行界面速度较快;
③可以高效地管理Linux;
3、系统的合法shell
系统上合法的shell都保存在 /etc/shells 文件中,默认是bash
4、bash shell的优点
①命令记忆(history);
②命令与文件补全(Tab键);
③命令别名设置(alias);
④作业控制,前台、后台控制;
⑤程序脚本(shell script);
⑥通配符;
5、内置命令: type
#用法:type [-tpa] name
#功能:查询name表示的命令是外部命令、shell内嵌命令还是命令别名设置的名称
二、shell变量
1、变量的显示: echo $var #显示var的内容
2、变量的设置规则(重点):
①变量与变量内容以一个等号“=”来连接;
②等号两边不能直接接空格符;
③变量名称只能是英文字母和数字,且开头只能是字母;
④变量内容有空格时使用双引号将内容括起来;
⑤可用转义字符“\”将特殊符号([Enter]、$、\、空格、!等)变成一般字符;
⑥使用单引号“`”或者“$(命令)”来获得其他命令提供的信息;
⑦增加变量内容时可以直接在变量后面累加内容,如:PATH=$PATH:/bin,在PATH后面加上“:/bin”;
⑧若该变量需要在其他子进程执行,则应该使用export var使该变量变成环境变量;
⑨通常大写字符为系统默认变量,自行设置的变量可以使用小写字符;
⑩取消变量的方法: unset var ;
3、用 env 查看环境变量,用 set 查看所有变量,用 export 将变量设置为环境变量
4、常见环境变量说明(重点):
HOME:代表用户的主文件夹
SHELL:当前环境使用的shell
HISTSIZE:记录的历史命令的最大条数
MAIL:邮件信箱文件
PATH:执行文件的查找路径
LANG:语系数据
RANDOM:随机数变量,随机数生成器为/dev/random这个文件
PS1:命令提示符
$:本shell的PID
?:上个命令执行的回传码
OSTYPE,HOSTTYPE,MACHTYPE:主机硬件与内核等级
5、查询支持的语系: locale -a
6、语系设置:使用 locale 查看变量,直接修改对应变量即可
7、变量的有效范围:环境变量 == 全局变量 自定义变量 == 局部变量
8、变量的读取: read [-pt] var #从标准输入读取var的内容,-p后跟提示信息,-t后跟等待时间(s)
9、变量的声明: declare [-aixr] var #声明变量并指明类型,-a(数组),-i(整数),-x(环境变量),-r(只读),默认为字符串
10、与文件系统及程序的限制关系: ulimit [-SHacdfltu] [配额] #设置配额,-a参数为列出所有限制数据的值
11、变量内容删除、替代与替换:
| 变量设置方式 | 说明 |
| ${变量#关键字} | 若变量内容从头开始的数据符合“关键字”,则将符合的最短数据删除 |
| ${变量##关键字} | 若变量内容从头开始的数据符合“关键字”,则将符合的最长数据删除 |
| ${变量%关键字} | 若变量内容从尾向前的数据符合“关键字”,则将符合的最短数据删除 |
| ${变量%%关键字} | 若变量内容从尾向前的数据符合“关键字”,则将符合的最长数据删除 |
| ${变量/旧字符串/新字符串} | 若变量内容符合“旧字符串”,则第一个旧字符串会被新字符串替换 |
| ${变量//旧字符串/新字符串} | 若变量内容符合“旧字符串”,则全部的旧字符串会被新字符串替换 |
12、变量的测试与内容替换
| 变量设置方式 | str没有设置 | str为空字符串 | str已设置为非空字符串 |
| var=${str-expr} | var=expr | var= | var=$str |
| var=${str:-expr} | var=expr | var=expr | var=$str |
| var=${str+expr} | var= | var=expr | var=expr |
| var=${str:+expr} | var= | var | var=expr |
| var=${str=expr} |
str=expr var=expr |
str不变 var= |
str不变 var=$str |
| var=${str:=expr} |
str=expr var=expr |
str=expr var=expr |
str不变 var=$str |
| var=${str?expr} | expr输出至stderr | var= | var=str |
| var=${str:?expr} | expr输出至stderr | expr输出至stderr | var=str |
三、命令别名与历史命令
1、命令别名设置
alias #查看当前已设置的命令别名
alias new_cmd='old_cmd' #将old_cmd命令(包含选项和参数)设置为new_cmd
unalias new_cmd #取消别名设置
2、历史命令
history [n-carw] [histfiles] #查看曾经执行过的命令
!n #执行第n条命令
!! #执行上一条命令
!cmd #执行最近的以cmd开头的命令
3、历史命令的保存文件: ~/.bash_history,文件总共保存HISTSIZE条命令,注销时更新
四、Bash shell的操作环境
1、路径与命令查找顺序:
①以相对/绝对路径执行命令;
②由alias找到该命令来执行;
③由bash内置的(builtin)命令来执行;
④通过$PATH这个变量的顺序找到第一个命令执行;
2、bash的登录与欢迎信息:通过编辑 /etc/issue 和 /etc/motd 来修改
3、bash的环境配置文件: /etc/profile、/etc/inputrc、/etc/profile.d/*.sh、/etc/sysconfig/i18n、/etc/bashrc、~/.bash_profile、~/.bash_login、~/.bash_logout、~/.bash_history、~/.profile、~/.bashrc
4、读入环境配置文件: source '配置文件名' #source可用 '.' 替换
5、通配符与特殊符号
| 通配符 | 意义 |
| * | 代表0到无穷多个任意字符 |
| ? | 代表一定有一个任意字符 |
| [] | 代表一定有一个在中括号内的字符 |
| [-] | 代表在编码顺序内的所有字符 |
| [^] | 代表除了括号内的字符以外的其他任意一个字符 |
| 特殊符号 | 内容 |
| # | 批注符号,在script中,其后的内容为注释 |
| \ | 转义符号,将特殊字符或通配符还原成一般字符 |
| | | 管道 |
| ; | 连续命令执行的分隔符 |
| ~ | 用户的主文件夹 |
| $ | 使用变量的前导符 |
| & | 作业控制符,将命令变成后台运行 |
| ! | 逻辑运算中的“非(not)” |
| / | 目录符号,路径分隔符 |
| >,>> | 数据流重定向,输出导向,分别是“替换”与“累加” |
| <,<< | 数据流重定向,输入导向 |
| '' | 单引号,不支持变量扩展 |
| "" | 双引号,支持变量扩展 |
| `` | 反引号,其中的命令为先执行的命令,也可以使用$() |
| () | 括号中间为子shell的起始与结束 |
| {} | 中间为命令块的组合 |
五、数据流重定向
1、标准输入、输出和标准错误:0、1、2
2、垃圾桶黑洞设备与特殊写法
cmd > /dev/null #将cmd执行产生的错误信息导入黑洞文件/dev/null中
cmd >& #将标准错误重定向到标准输出
cmd << "eof" #将“eof”作为标准输入结束的标志
3、命令执行顺序
| 命令执行情况 | 说明 |
| cmd1; cmd2 | 按顺序执行cmd1和cmd2 |
| cmd1 && cmd2 | 只有cmd1执行成功时才执行cmd2 |
| cmd1 || cmd2 | 只有cmd1执行失败时才执行cmd2 |
六、管道命令
1、选取命令: cut,grep
#命令:cut -d '分隔字符' -f 段数 或 cut -c 字符范围
#功能:将同一行里面的数据进行分解,可以取出我们所需要的数据
#命令:grep [-acinv] [--color=auto] '查找字符串' filename
#功能:解析一行文字,若该行有关键字,则取出该行
2、排序命令: sort,wc,uniq
#命令:sort [-fbMnrtuk] [file or stdin] #对数据进行排序
#命令:uniq [-ic] #去除重复的数据,要求被处理的数据已排好序,-i忽略大小写,-c进行计数
#命令:wc [-lwm] #统计行、字数、字符数,-l仅列出行,-w仅列出字数(英文单字),-m字符个数,默认输出行、字数、字符数
3、双向重定向: tee
#命令:tee [-a] file #将数据重定向到标准输出和file指定的文件,-a参数指出以累加的方式导入数据
4、字符转换命令: tr,col,join,paste,expand
#命令:tr [-ds] SET1 #-d删除信息当中的SET1,-s替换重复的字符
#主要用途:删除或者替换一段信息中的文字
#命令:col [-xb] #-x将tab转换为对等的空格键,-b在文字内有反斜杠(/)时,仅保留反斜杠最后接的那个字符
#主要用途:经常被用来将man page转存为纯文本文件以方便查阅
#命令:join [-ti12] file1 file2 #-t后跟分隔符,默认为空格,-i忽略大小写,-1后跟第一个文件要比较的字段序号,-2后跟第二个文件要比较的字段序号
#主要用途:将两个文件中有相同数据的那一行加在一起,注意要处理的信息应该已排好序
#命令:paste [-d] file1 file2 #直接将两行贴在一起,可以通过-t指出要使用的分隔符,默认为tab
#命令:expand [-t] file #将tab转换为空格键,-t指出一个tab转换为多少个空格
5、切割命令: split
#命令:split [-bl] file PREFIX #将文件切割为若干个小文件,-b后可接欲切割成的文件大小,-l后跟一个整数,指明按多少行为一个文件来切割,PREFIX为切割文件的前导文字
6、参数代换: xargs
#命令:xargs [-0epn] cmd #将数据切割,作为下一个命令的参数
#主要用途:通过xargs来为那些不支持管道的命令提供该命令引用标准输入之用
7、减号‘-’的用途:将前一个命令的标准输出作为这次命令(不支持管道)的标准输入
总结:虽然Linux shell下的命令很多,但经常用到的也就那一部分,不断的练习和使用后就能慢慢掌握
bash shell学习-shell基础 (笔记)的更多相关文章
- bash shell学习-正则表达式基础 (笔记)
A gentleman is open-minded and optimistic; a small person is narrow-minded and pessimistic. "君子 ...
- 学习webpack基础笔记01
学习webpack基础笔记 1.webpack搭建环境最重要的就是如何使用loader和plugins,使用yarn/npm安装插件.预处理器,正确的配置好去使用 2.从0配置webpack - 1. ...
- shell学习指南-阅读笔记
shell学习指南真不是刚开始学习shell应该看得书,虽然其中讲了简单的linux命令,shell语法等,但是每章也有些深入和生僻地方,我想如果我刚学shell看到这样的地方一定会头疼的要死.或许也 ...
- Shell学习——Shell分类:登录shell和非登陆shell 交互shell和非交互shell
1.从两个不同维度来划分,是否交互式,是否登录 2.交互式shell和非交互式shell 交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shel ...
- bash shell学习-shell script基础 (笔记)
A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) Linux ...
- Shell脚本编程基础笔记二
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8177697.html 一:输入 1:运行时参数 可以在启动脚本时,在其后输入参数. ./脚本 参数1 参数2. ...
- Shell脚本编程基础笔记一
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8176137.html 一:脚本文件的创建.格式.运行 1:创建shell脚本 首先,要创建一个文件 touch ...
- Shell学习---Shell脚本的静态检查工具shellcheck
Shell脚本的静态检查工具shellcheck ubuntu下 apt install shellcheck ,即可安装shellcheck.写完shell脚本,记得用它检查一下,能给你点建议的.要 ...
- Vue学习计划基础笔记(五) - 表单输入绑定、组件基础
表单输入绑定.组件基础 目标: 熟练掌握vue中表单的处理方式 对之前学习的内容简单回顾一下,并写一个实例,学以致用(最好脱离文档) vue中表单的处理方式 vue中表单的处理使用了v-model指令 ...
随机推荐
- Linux负载均衡软件LVS之一(概念篇)
一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver ...
- bzoj 1264 [AHOI2006]基因匹配Match(DP+树状数组)
1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 793 Solved: 503[Submit][S ...
- POJ 3208 Apocalypse Someday
题意: 将含有连续的三个6的数称为不吉利数,比如666,1666,6662,但是6266吉利.则666为第一个不吉利数,输入整数n,求第n个不吉利数.(n <= 5*10^7) 解法: 如果是给 ...
- 在反射中Member{get{..}set{..}}与Member{get;set;}的区别?
最近的在写代码的时候,需要用到反射来获取类中的所有公开属性值,于是写下如下代码: StringBuilder sb = new StringBuilder(); foreach (var f in t ...
- Lucene简介
1 lucene简介1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供 ...
- Python爬虫获取迅雷会员帐号
代码如下: import re import urllib.request import urllib import time from collections import deque head = ...
- Java8特性详解 lambda表达式 Stream
1.lambda表达式 Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正 ...
- Android MediaCodec 使用例子
Android MediaCodec 使用例子 下面的例子是使用MediaCodec 录制到文件的例子. 1 public class AvcEncoder { private MediaCodec ...
- codevs1002搭桥(建图+Prim)
/* 先来个灌水法 然后建图跑最小生成树 注意观察题目中的规则 a[1][i]!=a[1][j]&&abs(a[2][i]-a[2][j])<=1 建图的时候可以每一个建筑物都看 ...
- codevs1051单词接龙(栈)
/* 看到n的范围就觉得这个不可能是DP啥的 因为这个接龙的规则十分的简单 只要前缀相同即可 所以先按字典序排一遍 这样保证符合规则的一定挨着 然后弄一个stack 每次拿栈顶元素看看待入栈的元素是否 ...