1,Shell
Shell是操作系统与用户进行交互操作的界面.
Shell是内核kernel的”壳”, 是用来将机器语言和人类语言相互转化而存在的软件层次.
Shell是命令语言、命令解释程序及程序设计语言的统称
Shell本身就是一个从文件或终端读取命令、解释这些命令并通常执行其他命令的命令
Shell它的作用是控制内核为用户工作
1.1,自定义变量
查看变量
echo $PATH
设置规则
规则 例子 变量与变量内容以一个等号(=)来连接 等号两边不能直接接空格 变量名称只能是英文字母与数字,但是开头字符不能是数字 变量内容若有空格可使用双引号或单引号将变量内容结合起来 双引号内的特殊字符如$保持原本特性 单引号内的特殊字符仅作为纯文本 可使用转义符【\】将特殊符号变成一般字符
(回车,空格,$,\,',“)
借用其他额外命令所提供的信息 扩增变量 若变量需要在其他子程序执行,用export转环境变量 通常大写字符为系统默认变量,自行设置的变量为小写,方便判断。 取消变量的使用
1.2,环境变量
查看环境变量(env)
HOME 用户家目录 SHELL 目前使用的SHELL HISTSIZE 曾经执行过的命令有多少可以被记录下来 系统会读取邮箱文件 PATH 执行文件的查找路径 LANG 语系数据 自定义变量转换为环境变量 (export)
提示字符设置(PS1)
提示字符:
\d 可显示出【星期 月 日】的日期格式,如:【Mon Feb 2】 \H 完整的主机名 \h 仅取出第一个小数点之前的名字 \t 显示时间,24小时格式【HH:MM:SS】 \T 显示时间,12小时格式【HH:MM:SS】 \A 显示时间,24小时格式【HH:MM】 \@ 显示时间,12小时格式【am/pm】 \u 目前用户的账号名称 \v BASH的版本信息 \w 完整的工作目录名称,由根目录写起的目录名称 \W 利用basename函数取得工作目录名称,仅会列出最后一个目录名 \# 执行的第几个命令 \$ 提示符,如果是root,则为#,否则为$
1.3,变量内容的删除、取代与替换
规则:
变量配置方式 说明 ${变量#关键词} 若变量内容从头开始的数据符合【关键词】,则将符合的最短数据删除。 ${变量##关键词} 若变量内容从头开始的数据符合【关键词】,则将符合的最长数据删除。 ${变量%关键词} 若变量内容从尾向前的数据符合【关键词】,则将符合的最短数据删除。 ${变量%%关键词} 若变量内容从尾向前的数据符合【关键词】,则将符合的最长数据删除。 ${变量/旧字符串/新字符串} 若变量内容符合【旧字符串】,则【第一个旧字符串】会被新字符串取代。 ${变量//旧字符串/新字符串} 若变量内容符合【旧字符串】,则【全部旧字符串】会被新字符串取代。
1、删除杜马
[root@VM-8-10-centos ~]# echo ${ysy#*杜马}
+步鹰+平田市+云建明
2、替换步鹰
[root@VM-8-10-centos ~]# echo ${ysy/+步鹰/燕双嘤}
燕双嘤+平田市+云建明
1.4,命令别名
命令别名可以让你简化命令,将很长的命令设置成你喜欢的命令。
alias ll='ls -l'
瞬间感觉舒服多了,不用敲那么多代码了。如果忘记了,可以通过alias查看设置的命令。
取消别名设置:unalias ll
1.5,历史命令
命令:
history n 列出最近n条命令行表 -c 将目前的shell中的所有history内容全部清除 -a
-r
-w将目前新增的history命令新增入histfiles中,若没有加histfiles,则默认写入~/.bash history.
将histfiles的内容读取到目前这个shell的history记录中
将目前的history记录内容写入histfiles中
2,Bash shell的操作环境
2.1,bash的登录与欢迎信息
查看:
\d 本地端时间的日期 \l 显示第几个终端页面 \m 显示硬件等级 \n 显示主机的网络名称 \O 显示domain name \r 操作系统的版本 \t 显示本地端时间的时间 \S 操作系统的名称 \v 操作系统的版本 修改:vim /etc/issue
如果是远程登:vim /etc/issue.net
如果想让所有人都知道一些信息:vim /etc/motd
2.2,通配符与特殊符号
通配符 | 意义 |
* | 代表【0到无穷多个】任意字符 |
? | 代表【一定有一个】任意字符 |
[] | 同样代表【一定有一个在括号内】的字符。例如[abc]表示一定有一个字符可能是a,b,c其中的一个 |
[-] | 若减号在[]内表示范围。例如[0-9]表示0到9之间的所有数字 |
[^] | 表示非,例如[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受 |
特殊符号 | 内容 |
# | 注释符号 |
\ | 转义符 |
| | 管道:分隔两个管道命令的符号 |
; | 连续命令执行的分隔符:连续性命令的界定 |
~ | 用户的家目录 |
$ | 使用变量前导符:既是变量之前需要加的变量替换值 |
& | 任务管理:将命令变成后台任务 |
! | 逻辑运算意义上的【非】 |
/ | 目录符号:路径分隔的符号 |
>,>> | 数据流重定向:输出定向 |
<,<< | 数据流重定向:输入定向 |
'' | 单引号,不具有变量替换功能 |
“” | 双引号,具有变量替换功能 |
() | 在中间为子shell的起始于结束 |
{} | 在中间为命令区块的组合 |
2.3,数据流重定向
将某个命令执行后应该在屏幕输出的数据,给它传输到其他的地方。
标准输入 代码为0,使用<或<< <:将原本需要由键盘输入的数据,改由文件内容来替换。
<<:结束的输入字符。
标准输出 代码为1(默认),使用>或>> 1>:以覆盖的方式将【正确的数据】输出到指定的文件或设备上。
1>>:以累加的方式将【正确的数据】输出到指定的文件或设备上。
标准错误输出 代码为2,使用2>或2>> 2>:以覆盖的方式将【错误的数据】输出到指定的文件或设备上。
2>>:以累加的方式将【错误的数据】输出到指定的文件或设备上。
文件问题:
- 如果指向的文件不存在,则系统会自动建立。
- 当这个文件存在的时候,那么系统就会先将这个文件内容清空,然后再将数据写入(>方式)。
同时输出和错误输出:
find /home -name .bashrc > list 2>&1 或 find /home -name .bashrc &> list
标准输入(类似于cp命令):
正常情况下无法终止,可以在开始的时候使用<<声明终止符。
3,管道命令(pipe)
管道命令仅能处理经由前面一个命令传来的正确信息,也就是标准输出信息,对于标准错误并没有直接处理的能力。
管道命令必须要能够接受来自前一个命令的数据成为标准输入继续处理才行。
3.1,选取命令:cut、grep
选取命令:将一段数据经过分析后,取出我们所想要的,或是经由分析关键词,取得我们想要的那一行。
cut:将一段信息的某一段给它切出来,处理信息以【行】为单位。
cut -d‘分割字符’ -f fields 按照分隔符划分成数据段 按照-d划分的数据段,取出第fields段。 cut主要用途在于将同一行里面的数据进行分解,最常使用在分析一些数据或文字数据的时候。这是因为有时候我们会以某些字符当作划分的参数,然后来将数据加以分割,以取得我们所需要的数据。
grep:分析一行信息,若当中有我们所需要的信息,就将该行拿出来。
grep -a:将二进制文件以文本的方式查找数据 ’查找字符‘ -c:计算找到 ‘查找字符’ 的次数 -i:忽略大小写的不同,所以大小写视为相同 -n:顺便输出行号 -v:反向选择,显示出没有 ’查找到‘ 内容的那一行
3.2,排序命令:sort、wc、uniq
sort:帮助我们进行排序,而且可以根据不同的数据形式来进行排序,例如数字与文字排序。
sort -f:忽略大小写差异,例如A与a视为编码相同 文件名 -b:忽略前面的空格字符部分 -M:以月份的名字来排序,例如JAN,DEC等排序方法 -n:使用【纯数字】进行排序(默认以文字形式来排序) -r:反向排序 -u:uniq,相同的数据中,仅出现一条 -t:分隔符号,默认是用【Tab】 -k:那个区间来进行排序 uniq:去重
uniq -i:忽略大小写 -c:进行技术 wc:统计数据
wc -l:仅列出行 -w:仅列出多少字(英文字母) -m:多少字符 分别代表:行、字数、字符数
3.3,双向重定向:tee
tee:既可以存储到指向文件中,又可以在屏幕上打印。
-a:累加
3.4,字符转换命令:tr、col、paste
tr:删除一段信息中的文字,或是进行文字信息的特换。
tr '目标字符' '替换字符' 将信息中的目标字符替换为替换字符 tr -d '目标字符' 删除目标字符 tr -s 替换掉重复字符 col -x:将【tab】替换成空格键
paste:将两行站在一起,中间以【Tab】键隔开而已。