shell基础
shell是什么
-
shell就是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序
-
shell还是一个功能相当强大的编程语言,易编写,易调试灵活性较强,shell是解释执行的脚本语言,在shell中可以直接调用linux命令
-
shell主要用来简化管理员操作,方便系统管理的,注重功能实现和清晰的逻辑,非服务器程序那样注重效率
shell将命令通过ASSIC码表翻译为计算机可以识别的指令给内核,内核执行返回执行结果给shell
###shell的分类
echo $SHELL
查看当前的系统中运行的shell
Bourne Shell
: 从1979 起Unix就开始使用bourne shell
,主文件名为sh
不支持历史命令
-
C shell
: C shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而闻名 -
shell的主要语法类型有
bourne
和C这两种语法彼此不兼容,bourne
家族主要包括sh,ksh,bash,psh,zsh
,C家族主要包括csh,tcsh
一般linux系统中的shell是bash,这个不分发行版本,
- bash:bash和sh 兼容,现在使用linux就是使用bash作为用户的基本shell
在控制台键入
sh
进入sh,是一种比较古老比较简单的模式,占用的资源更少,在进行系统修复的时候使用
- linux可以在终端调用另一个shell或者子shell,可以做到层级调用
脚本的执行方法
-
echo [选项] [输出内容]
,当输出内容有空格就需要双引号-
选项
-e
支持反斜线控制的字符转换 ,用来调整字符格式 -
十六进制输出 ,
echo -e "\x68\t\x65\t"
-
-
字符转换
-
输出字体颜色,
\e[1;31m
开启颜色显示,\e[0m
关闭颜色显示
echo -e " \e[1;31m hello linux \e[0m "
!
在echo中是有特殊含义的不能直接输出;真实的环境是不可以输入中文的,但是xshell之类的远程连接工具可以,除非安装中文环境;
脚本编写与执行
//vim 编写脚本
vim hello.sh;
//这不是注释,而是必须要带的规范,如果是纯shell语言没有问题,但是在shell语言中可以调用其他语言,不写规范脚本执行会报错
#!/bin/bash
#the first program
echo -e " \e[1;31m hello linux \e[0m "
// :wq保存退出
//脚本执行 , 赋予执行权限,直接运行
chmod 755 hello.sh
//通过bash调用脚本执行(bash直接解释脚本) 或者 ./hello.sh
bash hello.sh
别名与快捷键
linux 别名
alias
查看系统当中已经用到了的别名
*alias 别名 = [原命令]
设定命名别名
* 实例 alias ls = 'ls --color==never'
取消ls命令的颜色显示
* alias ls = 'ls --color==auto'
开启ls命令的颜色显示
vim 是vi 的增强版, 支持颜色显示,功能更加强大,可以设置别名,alias vi=vim
- 以上方法配置别名之后只能临时生效,重启计算机别名配置就失效了
vi ~/.bashrc
写入环境变量配置文件,每一个用户都会有环境变量配置文件,会对对应的用户生效
alias vi='vim' //临时生效
vi /root/.bash.rc 写入 alias vi='vim'
`source .bashrc` //直接生效
在环境变量配置之后,需要重新登陆才能生效,
source .bashrc
直接生效不用重新登录
unalias 别名
删除别名 ,只是临时删除,如果需要永久删除,不仅要执行这一句话,并且还要在环境变量配置文件删除,并且生效
命令生效顺序
- 顺位执行用绝对路径或相对路径执行的命令
- 顺位执行别名
- 顺位执行bash内部命令
- 顺位执行按照$PATH环境变量定义的目录查找顺序找到第一个命令
以上所有的方式都没有找到命令,name终端显示命令没有找到
快捷键
Ctrl +c
强制终止clear
命令清屏 ,快捷Ctrl +L
Ctrl + u
从光标所在位置删除到首行Ctrl + a
光标移动到命令行首Ctrl + e
光标移动到命令行尾ctrl + z
把命令放入后台ctrl + r
在历史命令中搜索
历史命令
history [选项] [历史命令保存文件]
- 选项
-c
清空历史命令 -w
把缓存中的历史命令写入历史命令保存文件~/.bash_history
,每个用户都有自己的历史命令保存文件,不同用户不会互相冲突
- 选项
history中的命令和历史命令文件保存的不一定一致,一般而言要多一些,系统会在正常退出之后将缓存中的命令写入到文件中,
history -w
将缓存写入文件
- 历史命令默认保存1000条,可以在环境变量配置文件中
/etc/profile
中修改
历史命令的调用
- 使用上下箭头调用以前的历史命令
- 使用
!n
重复执行第n条历史命令 - 使用
!!
重复执行上一条命令 - 使用
!字符串
重复执行最后一条以该字符串开头的命令
命令与文件补全
- 使用
TAB
键操作来补全命令和文件,补全命令依赖$PATH
环境变量,补全文件依赖当前操作的路径
输入与输出重定向
-
输入与输出: 将内容写入系统为输入,将执行完的结果进行显示为输出
-
标准的输入输出,用文件描述符来表示键盘(标准输入)显示器(包括正确与错误输出)
输出重定向,将显示在控制台的结果输出到文件中(前提是有输出结果),如果文件不存在则创建,存在则修改文件
正确输出
命令 > 文件
错误输出错误命令 2>文件
,错误输出记得不要带上空格
输入重定向
-
wc [选项] [文件名]
- 选项
-c
统计字节数 -w
统计单词数-l
统计行数
- 选项
-
命令<文件把文件作为命令的输入
wc log.txt
等于wc < log.txt
-
命令<<标识符
- 用于统计下次输入到标识符之间的输入的内容
-
标识符把标识符之间内容作为命令的输入
多命令顺序执行
ls && echo yes || echo no
注意逻辑与和逻辑或不能随意调换顺序 ,当第一条命令正确执行,逻辑与生效,第二条命令才会执行,然后逻辑或生效,第三条命令也就不会执行
管道符
- 命令格式
命令1 | 命令2
命令1的正确输出作为命令2的操作对象; - 管道符操作的命令比较严格,不是任何命令都可以对结果进行操作
ls -l | echo //无法正确输出
ls -l | more 分屏显示输出结果
netstat -an |grep "ESTABLISHED"
管道符和逻辑或逻辑与的区别
- 管道符的操作的是上一条命令的执行结果,而逻辑操作没有数据交换,只是命令的执行结果影响执行逻辑
more命令分屏显示文件内容,可以先将命令操作结果输出重定向到文件,然后more 查看文件;
abc[^0-9]* 匹配以abc开头的非数字字符串
linux 通配符
-
Bash中的其他特殊符号
-
echo
ls
等同于 echo $(date) 反引号的功能和 $()一致 ,调用系统命令,先执行再赋值给系统变量
bb=$(ls)将结果赋值给变量
echo $bb //打印变量结果