十、Shell基础
一、shell概述
1.Shell是什么
shell是一个命令行解释器,他为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序
shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接调用linux系统命令
2.Shell分类
1)Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh
2)C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言非常类似,所以叫C Shell
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash(linux中的标准shell)、psh、zsh;C 家族主要包括:csh(unix中主要使用的shell)、tcsh
TIP:可以使用命令:echo ¥SHELL来输出当前系统使用的是什么shell
3)Bash:Bash与sh兼容,现在使用的linux就是使用Bash作为用户的基本Shell
3.Linux支持的Shell

二、脚本执行方式
1.echo输出命令
echo [选项] [输出内容]
选项:
-e:支持反斜线控制的字符转换
|
控制字符 |
说明 |
| \a | 输出警告音 |
| \b | 退格键,也就是向左删除键 |
| \n | 换行符 |
| \r | 回车键 |
| \t | 制表符,也就是Tab键 |
| \V | 垂直制表符 |
| \0nnn | 按照八进制ASCII码输出字符。其中0为数字零,nnn是三位八进制数 |
| \xhh | 按照十六进制ASCII码输出字符。其中hh是两位十六进制数 |

[root@localhost ~]# echo -e "\e[1;31m你好\e[0m"
#使用红色字体输出你好
#30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=粉红,36m=青色,37m=白色
上面这行示例代码中\e代表颜色,[1代表开启眼色,31m代表我要使用红色,\e[0m代表关闭颜色
2.第一个脚本
1)使用命令“vi hello.sh”创建一个脚本
2)文本中输入:”#!bin/bash”(做一个声明)
3)正文输入:echo –e “Hello World!”,然后保存退出
3.脚本执行
1)赋予执行权限,直接运行
chmod 755 hello.sh
./hello.ssh
2)通过Bash调用执行脚本
bash hello.sh
三、bash的基本功能
1.命令别名与快捷键
alias
#查看系统中所有的命令别名
alias 别名=’原命令’
#设定命令别名(需要注意的是只是用命令行增加别名的话只是临时使用,相当于windows当中的临时环境变量)


1)别名永久生效
vi ~/.bashrc
#写入环境变量配置文件(需要注意的是写入后是重启设备后才会生效,如果需要直接生效需要再加一条命令source .bashrc相当于更新一下那么就可以直接生效了)
2)删除别名
unalias 别名
#删除别名(只是删除临时别名)
3)命令生效顺序
第一顺位执行用绝对路径或相对路径执行的命令
第二顺位执行别名
第三顺位执行bash的内部命令
第四顺位执行按照¥PATH环境变量定义的目录查找顺序找到的第一个命令
4)常用快捷键
| ctrl+c | 强制终止当前命令 |
| ctrl+l | 清屏 |
| ctrl+a | 光标移动到命令行首部 |
| ctrl+e | 光标移动到命令行尾部 |
| ctrl+u | 从光标所在位置删除到行首 |
| ctrl+z | 把命令放入后 |
| ctrl+r | 在历史命令中搜索 |
2.历史命令
1)历史命令
history [选项] [历史命令保存文件]
选项:
-c:清空历史命令
-w:把缓存中的历史命令写入历史命令保存文件”~/.bash_history”
history看到的是所有历史命令,.bash_history中的历史命令是系统退出时候自动写入的。
需要注意的是历史命令会默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改

2)历史命令的调用
使用上下箭头调用以前的历史命令
使用”!n”重复执行第n条历史命令
使用”!!”重复执行上一条命令
使用”!字符串”重复执行最后一条以该字符串开头的命令
3)命令与文件补全
在bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按下Tab键就会进行自动补全
3.输出重定向
1)标准输入输出
|
设备 |
设备文件名 |
文件描述符 |
类型 |
| 键盘 | /dev/stdin | 0 | 标准输入 |
| 显示器 | /dev/sdtout | 1 | 标准输出 |
| 显示器 | /dev/sdterr | 2 | 标准错误输出 |
2)输出重定向
|
类型 |
符号 |
作用 |
| 标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中 |
| 命令 >> 文件 | 以追加的方式,把命令的正确输出输出到指定的文件或设备当中 | |
| 标准错误输出重定向 | 错误命令 2>文件 | 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中 |
| 错误命令 2>>文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 |
标准输出重定向将命令的结果保存在文件中(只要命令的结果有输出就会保存)
错误输出重定向(注意符号两边没有空格)

|
类型 |
符号 |
作用 |
|
正确输出和错误输出同时保存 (注意区分是否存在空格) |
命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
| 命令 >> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 | |
| 命令 &>文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 | |
| 命令 &>>文件 | 以追加的方式,把正确输出和错误输出都保存到用一个文件当中 | |
| 命令>>文件1 2 >>文件2 | 把正确的输出追加到文件1中,把错误的追加到文件2中 |
ls &>/dev/null只执行命令,不保存也不显示运行结果,/dev/null可以当作是垃圾回收站
命令 >> 文件 2>&1
以追加的方式把正确输出和错误输出都保存到同一个文件中去1
命令 &>>文件
以追加的方式把正确输出和错误输出都保存到同一个文件中去2

命令>>文件1 2 >>文件2
把正确的输出追加到文件1中,把错误的追加到文件2中

3)输入重定向
wc [选项] [文件名]
ctrl+d退出
| 选项 | 说明 |
| -c | 统计字节数 |
| -w | 统计单词数 |
| -l | 统计行数 |
使用wc统计文件行数、单词数、和字节数,也可以不用中间的那个<符号也可以统计
4.管道符
1)多命令顺序执行
|
多命令执行符 |
格式 |
作用 |
| ; 这是一个分号 |
命令1 ; 命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
| && | 命令1 && 命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
| || | 命令1 || 命令2 | 逻辑或 当命令1执行不正确,则命令2才会执行 当命令1执行正确,则命令2不会执行 |
多个命令顺序执行
逻辑与

逻辑或

TIP:可以通过类似:ls && echo yes || echo no这样的方式来判断命令是否有误
2)管道符
命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
例如:
ls –l /etc | more来分屏查看命令执行结果
netstat –an | grep ESTABLISHED来监听我的服务器使用情况
netstat –an | grep ESTABLISHED | wc –l 来查看有多少人在使用我们的服务器
5.通配符
1)通配符
|
通配符 |
作用 |
| ? | 匹配一个任意字符 |
| * | 匹配0个或任意多个任意字符,也就是可以匹配任何内容 |
| [] | 匹配中括号中任意一个字符,例如[abc]代表一定匹配一个字符,或者a或者b或者c |
| [-] | 匹配括号中任意一个字符,-代表一个范围,例如[a-z]代表匹配一个小写字母 |
| [^] | 逻辑非,表示匹配不是括号内的一个字符,例如:[^0-9]代表匹配一个不是数字的字符 |
例如:
ls test* 列出test开头的所有文件
主要匹配文件名或者目录
2)Bash中其他特殊符号
|
符号 |
作用 |
| ‘’ | 单引号。在单引号中所有的特殊符号,如$和`都没有特殊含义 |
| “” | 双引号。在双引号中的特殊符号都没有特殊含义,但是$、`和\是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义 |
| `` | 反引号。反引号括起来的内容是系统命令,在bash中会先执行他。和$()作用一样。不过推荐使用$(),因为反引号非常容易看错 |
| $() | 和反引号作用一样,用来引用系统命令 |
| # | 在shell脚本中,#开头的代行注释 |
| $ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值 |
| \ | 转义符,在跟\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出$符号,而不当作是变量引用 |

十、Shell基础的更多相关文章
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- shell基础(转)
shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...
- 十大基础排序算法[java源码+动静双图解析+性能分析]
一.概述 作为一个合格的程序员,算法是必备技能,特此总结十大基础排序算法.java版源码实现,强烈推荐<算法第四版>非常适合入手,所有算法网上可以找到源码下载. PS:本文讲解算法分三步: ...
- Shell基础学习小结
0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...
- Shell基础-环境变量配置文件
Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- shell基础及变量
一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...
- Shell 基础教程
一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html
- Linux基础学习(10)--Shell基础
第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
随机推荐
- Ambiguous mapping. Cannot map 'labelInfoController' method
使用springboot项目中,启动时出现Ambiguous mapping. Cannot map 'labelInfoController' method , 原因是,@RequestMappin ...
- 【Alpha版本发布】爬虫队长正在待命!
一.基础功能简介 本团队的爬虫能够从网上搜索相关内容, 并归类,把所爬到的网页或各种类型的文档下载到本地上. 上届团队Beta版本爬虫的主要功能如下: a)可爬取网页,问答页并进行问答文件分类. b) ...
- 【Alpha发布】贡献分分配
最后贡献分分配: (1211)王嘉豪:32 (1186)黄雨萌:36 (1182)佘彦廷:40 (1208)何小松:50 (1200)鲁聃:62 (1174)邢浩:64 (1193)刘乾:66
- Internet History, Technology and Security (Week3)
Week3. Welcome to week 3! This is our fourth and final week of History where we make the connection ...
- AWS EC2安装docker时的问题
在AWS EC2的实例(Ubuntu)里面安装docker时,使用通常的安装步骤 :~$ sudo apt-get update :~$ sudo apt-get install docker 安装完 ...
- Scrum 项目7.0——第一个Sprint的总结和读后感
总结: 通过这一次的Sprint,我了解了Sprint的整个流程,也学会了编制backlog,也了解了在软件工程中,一个团队的任务是怎么样分配和一个项目是怎么样开展的.从对软件工程的认识只 ...
- xshell 常用快捷键
1.连接mysql数据库mysql -uroot -p -h127.0.0.1 -P3306 2.列出所有sessionshow full processlist; 3.查看20条执行时间最长的SQL ...
- http和https的优缺点,区别与工作原理
文章内容 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可 ...
- 使用userData兼容IE6-10,chrome,FF 及360等浏览器的本地存储
开发过程中涉及本地存储的使用,IE很多版本都不支持localStorage,没办法,就得兼容使用userData了.废话不说了,看代码: (function(window){var LS;(funct ...
- Windows下CURL扩展无效之终极解决办法。
本地开发环境使用WAMP快速搭建,在使用PHP的CURL时可能会存在无法载入情况,这里提供终极解决方法. 1.在php.ini配置文件中启用 php_curll.dll 扩展: (环境已经自动附带 l ...



