1. shell脚本的概述
shell既是一种应用程序,又是一种程序设计语言
1.1 作为应用程序
交互式的解释和执行用户输入的命令,将用户的操作翻译成机器可以识别的语言,完成相应的功能,故也称为shell命令解析器
用户在提示符下输入的命令都由shell先解释然后再传给Linux核心,所以说shell是用户和Linux内核之间的接口程序
Linux系统中提供了好几种不同的shell命令解释器,包括bash,ash,sh等。一般都使用默认的bash作为默认的解释器。
1.2 作为程序设计语言
它定义了各种变量和参数,提供了循环和分支等控制结构,完成类似于windows下的批处理操作,简化我们对系统的管理和应用程序的部署称为shell脚本
shell脚本主要用于帮助系统管理员将复杂而又反复的操作放在一个文件中,通过简单的一步执行操作完成相应任务,shell脚本是shell命令的有序集合
2. shell的定义与执行
2.2 shell脚本的定义
shell脚本的开头一般都是
#!/bin/bash
#!
用于什么使用哪个bash解释器,一般默认使用bash
2.2 shell脚本的执行
若shell脚本的文件名为 demo.sh
首先执行
chmod +x demo.sh
这行代码是为了给该文件添加可执行权限
然后有三种执行该文件的方式
./demo.sh #第一种 ./+文件名
bash demo.sh #直接指定使用bash解释demo.sh
.demo.sh #使用当前shell读取解释demo.sh
3. shell变量
3.1 自定义变量
定义变量
shell中不区分数据类型,定义变量不需要说明数据类型,直接
变量名=变量值,如:
num=10
引用变量
$变量名
如
i=$num 把变量num的值赋给变量i
显示变量
echo $num
清除变量
unset 变量名
读入变量
read str
read接收从键盘中输入的值,并把值赋给str
readonly str
read接收从键盘中输入的值,并把值赋给str,这个值是只读的,不能修改
**注意:**shell中的赋值操作在等号两边不能加空格
3.2 环境变量
shell在开始执行时候就已经定义了一些个系统工作环境有关的变量,在shell中可以直接使用$name引用。
一般环境变量都定义在/etc/profile或者./bashrc文件中,可以通过env命令查看当前系统所有的环境变量
定义环境变量
MYVAL=999
export MYVAL
将上述两行代码写到./bashrc或者/etc/profile中,就可以添加了新的环境变量,注意环境变量均为大写
3.3 预设变量
shell中已经设置好了一些变量,我们可以直接调用这些变量
$# :表示传给shell脚本参数的数量
$* :表示传给shell脚本参数的内容
$1,$2,$3…$9:表示运行脚本时候传递给其的参数,用空格隔开,如果参数的值超过9,则需要加大括号,即{$10}
$?:命令执行后返回的状态
命令执行成功则返回0,否则返回非0
$0 :当前执行的进程名
$$ : 当前的进程号
3.4 变量的特殊用法
“”双引号:包含的变量会被解释
’‘单引号:包含的变量会被当做字符串表示
``反引号:反引号中的内容作为系统命令,并执行其内容,输出命令的结果
$():和反引号的作用相同
例子:
结果如下:
\:表示转义字符
(命令序列) :在圆括号中的命令,由子shell来完成,不影响当前shell中的变量
{命令序列} :在大括号中的命令,会在当前shell中完成,会影响到当前shell中的变量,例如:
结果如下:
注意:在大括号内部的两边,均有空格,命令直接均用分号隔开,大括号中最后一个命令后面也有分号
4. 条件测试语句
在写shell脚本时,经常遇到的问题就是判断字符串是否相等,可能还要检查文件状态或进行数字测试,这时候要用到test命令
4.1 文件测试
test命令有两种格式
test 条件
[ 条件 ]
所谓文件测试,就是测试文件状态的表达式
1.按照文件类型
2.按照文件权限
3.两个文件之间的比较
测试文件是否存在,下面两行代码是等价的
test -e $file
[ -e file ]
注意:中括号内部两边必须有空格
4.2 字符串测试
4.3 数字测试
4.4 复合测试
判断多个条件是否成立
命令执行控制
&& || 和c++一样,符号两边都是完整的命令
多重条件判断
用这些来连接时,右边就不用写test了
结果为: