Shell基础
编辑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 通配符
![](https://gitee.com/iMist/Linux/raw/master/images/image27.png)
* Bash中的其他特殊符号
![](https://gitee.com/iMist/Linux/raw/master/images/imsgr28.png)
* echo `ls` 等同于 echo $(date) 反引号的功能和 `$()`一致 ,调用系统命令,先执行再赋值给系统变量
`bb=$(ls)`将结果赋值给变量
`echo $bb` //打印变量结果
- 0
- 0
-
分享