一、shell基本概述
- 什么是shell脚本?到底能解决什么问题?shell脚本其实就是把一批命令集合在一起,解决一些复杂的问题,有点类似于程序设计(在shell中,变量、分支、循环、函数、数组等与程序设计完全类似的功能),但是本质上来说不是程序设计。shell的程序复杂程度是无法真正与编程语言相提并论的,但是由于与操作系统集合在一起的,所以能够执行一些更加底层的命令组合,且效率很高
- linux系统中的shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果
- 常见的shell解释器程序有很多种,使用不用的shell脚本是,其内部指令、命令行提示等方面会存在一些区别,通过/etcshells文件可以了解当前操作系统支持的shell脚本种类
#列出系统中所有的shell cat /etc/shells # 查看当前环境变量$shell的值 echo $shell
二、shell的类型
- Bourne Shell:是贝尔实验室开发的,unix普遍使用的shell,在编程方面比较优秀,但在用户交互方面没有其他shell优秀
- Korn Shell:是针对Bourne Shell的发展,在大部分内容上与Bourne Shell兼容,继承了C Shell和Bourne Shell有点。
- BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,在Bourne Shell基础上增强了很多特性,如命令补全,命令历史表
- C Shell:是SUN公司的BSD版本,语法与C语言相似,比Bourne shell跟适合编程
三、创建一个shell并执行
-
新建shell文件并编写内容
vi first.sh cd /boot pwd ls -lh vml*
-
添加执行权限
chmod +x first.sh
-
执行shell脚本(3种执行方法)
# 当前目录下使用 ./ ,需要添加执行权限 ./first.sh # sh . source执行不需要执行权限 sh first.sh . first.sh source first.sh
四、重定向与管道操作
1、重定向操作
- 标准输入:默认的设备是键盘,文件编号为0,命令将从标准输入文件中读取在执行过程中需要的输入数据,使用 < 操作符
- 标准输出:默认的设备是显示器,文件编号为1,命令执行后的输出结果发送到标准输出文件。使用 > 覆盖或 >> 追加文件
- 标准错误:默认的设备是显示器,文件编号为2,使用 2> 或 2>> 用来将错误信息覆盖或追加到文件中(在标准输入、标准输出重定向时,实际上省略了1、0编号)
- 混合输出:使用 &> 将错误和标准信息一同保存到文件中
2、管道操作
- 管道操作为不同命令之间的协同工作提供了一种机制,位于管道符号“ | ” 左侧的命令输出的结果,将作为右侧命令的输入,同一行命令中可以使用多个管道
五、shell变量
1、定义并输出一个变量
# 定义一个变量
home=jilin
# 打印这个变量的值
echo $home
# 使用read命令定义变量,手动输入,-p选项来设置提示信息
read -p "请输入家乡:"school
echo $school
2、{},“”,‘’,``,的作用
# {}大括号的作用,用于包括变量名,以免与后面相连导致变量名错误
echo ${home}1.2
# ""双引号赋值时的作用,赋值变量时出现括号时使用,是为一整个变量
home="jilin baicheng"
# ""双引号也可以通过$符合引用其他变量的值
home=jilin
home1=baicheng
homes="$home $home1"
echo $homes
# ''单引号的作用,禁止引用其他变量的值,$视为普通字符
homes='$home $home1'
echo $homes
# ``反撇号的作用,命令替换,提取命令执行后的输出结果
ls -lh`which useradd`
3、变量的作用范围
- 默认为局部变量
- 可以使用内部命令 export 将指定的变量导出为全局变量
4、变量的运算
- 在bash shell 环境中,只能进行简单的整数运算,不支持小数运算,整数值的运算主要通过内部命令 expr 进行,运算符与变量之间至少有一个空格
- + :加法运算
- - :减法运算
- \* :乘法运算,不能仅使用 * 不然会被当成文件通配符
- / :除法运算
- % :取模运算
X=35
Y=16
expr $X + $Y
expr $X - $Y
expr $X \* $Y