1.基本介绍
Shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
2.Shell脚本的执行方式
脚本格式要求
- 脚本以#!/bin/bash开头
- 脚本需要有可执行权限
常用执行方式
方式(输入脚本的绝对路径或相对路径):首先赋予脚本x执行权限,然后执行脚本。
3.Shell变量
变量介绍
- Linux Shell中的变量分为:系统变量和用户自定义变量。
- 系统变量: H O M E 、 HOME、 HOME、PWD、 S H E L L 、 SHELL、 SHELL、USER等。
- 显示当前Shell中所有变量:set。
变量的定义
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly变量,静态变量不能unset
变量命名规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
- 等号两侧不能有空格。
- 变量名称一般习惯为大写。
将命令返回值赋予变量
A=`ls -la` //反引号,运行里面的命令并把结果返回给变量A
A=$(ls -la) //等价于反引号
4.设置环境变量
export 变量名=变量值 //将shell变量输出为环境变量
source 配置文件 //让修改后的配置信息立即生效
echo $变量名 //查询环境变量的值
5.未知参数变量
基本介绍
当我们执行一个Shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
基本语法
- $n:n为数字,$0代表命令本身, 1 − 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 1-9代表第一到第九个参数,十以上的参数需要用大括号包含,如 1−9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10}。
- $*:代表命令行中所有的参数,把所有的参数看成一个整体。
- $@:代表命令行中所有的参数,不过把每一个参数区分对待。
- $#:代表命令行中所有参数的个数。
6.预定义变量
基本介绍
Shell设计者事先已经定义好的变量,可以直接在Shell脚本中使用。
基本语法
- $$:当前进程的进程号。
- $!:后台运行的最后一个进程的进程号
- $?:最后一次执行的命令的返回状态,如果这个变量值为0,证明上一个命令正确执行;如果这个变量的值不为0,则证明上一个命令未正确执行。
7.运算符
- “ ( ( 运 算 式 ) ) " 或 " ((运算式))" 或 " ((运算式))"或"[运算式]”
- expr m + n 注意expr运算符之间要有空格
- expr m - n 注意expr运算符之间要有空格
- expr \ * , / , % 乘、除、取余
8.条件判断
基本语法
- [ condition ] 注意condition前后要有空格
- #非空返回true,可使用$?验证(0为true,>1 为false)
- [ condition ] && echo OK || echo notok 条件满足,执行后面的语句
常用判断条件
- 两个整数的比较:
条件 | 功能 |
---|---|
= | 字符串比较 |
-lt | 小于 |
-le | 小于等于 |
-eq | 等于 |
-gt | 大于 |
-ge | 大于等于 |
-ne | 不等于 |
- 按照文件权限进行比较:
条件 | 功能 |
---|---|
-r | 有读的权限 |
-w | 有写的权限 |
-x | 有执行的权限 |
- 按照文件类型进行判断:
条件 | 功能 |
---|---|
-f | 文件存在并且是一个常规文件 |
-e | 文件存在 |
-d | 文件存在并且是一个目录 |
9.流程控制
if判断
//第一种形式
if [ 条件判断式 ];then
程序
fi
//第二种形式
if [ 条件判断式 ]
then
程序
elif[ 条件判断式 ]
then
程序
fi
注意事项:[ 条件判断式 ],中括号和条件判断式中必须有空格。
case语句
case $变量名 in
"值1")
程序1
;;
"值2")
程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
for循环
//形式1
for 变量 in 值1 值2 值3···
do
程序
done
//形式2
for(( 初始值;循环控制条件;变量变化 ))
do
程序
done
while循环
while[ 条件判断式 ]
do
程序
done
10.read读取控制台输入
read(选项)(参数) //参数:变量——指定读取值的变量名
选项说明:
选项 | 功能 |
---|---|
-p | 指定读取值时的提示符 |
-t | 指定读取值时等待的时间(秒),如果未在指定时间内输入,就不再等待 |
11.函数
基本介绍
Shell编程和其它编程语言一样,有系统函数,也可以自定义函数。
系统函数
- basename:
basename [pathname][suffix] //返回完整路径最后 / 的部分,常用于获取文件名
basename [string][suffix] //会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来
- dirname:
dirname 文件绝对路径 //从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
自定义函数
[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名 : funname [值]