shell脚本
-
什么是shell脚本
-
shell脚本的格式要求
- 脚本以#!/bin/bash开头
- 脚本需要具备执行权
-
shell脚本的执行
- hello world案例
- 脚本的运行方式
- 输入脚本的绝对路径或者相对路径方式(需要执行权限)
- sh 脚本方式(可以没有执行权限)
-
shell脚本的注释
- 单行注释:#
- 多行注释::<<! !
-
shell脚本的变量
- 变量的分类
- 系统变量
- 取用 H O M E 和 HOME和 HOME和PATH等
- 通过:set可以输出全部系统变量
- 设置环境变量
- export 变量名=变量值
- source 配置文件
- 自定义变量
- 定义变量:变量名=值
- 使用$取用
- 撤销变量:unset 变量
- 静态变量:readonly 变量,(注意不能:unset)
- 变量的定义规则
- 变量由字母,数字和下划线组成,不能以数字开头
- 等号两边不能有空格
- 变量名一般习惯大写
- 将命令的返回值赋值给变量
- A=
运算
- A=$(运算)
- A=
- 案例
- 定义变量A
- 撤销变量A
- 声明静态变量B,验证unset
- 定义全局变量
- 系统变量
- 变量的分类
-
位置参数变量
- n : n 为 参 数 的 位 置 , 从 0 开 始 , 0 为 自 身 , 1 − 9 为 第 1 − 9 个 参 数 , 10 个 以 上 使 用 n:n为参数的位置,从0开始,0为自身,1-9为第1-9个参数,10个以上使用 n:n为参数的位置,从0开始,0为自身,1−9为第1−9个参数,10个以上使用{n}取用
- $*:把所参数当作一个整体来看
- $@:把所参数当作一个整体来看,不过把参数区分来看
- $#:参数的个数
-
预定义变量
- $$:当前进程的进程号
- $!:后台运行的最后一个进程的进程号
- $?:最后一次执行的返回状态,为0执行正确,非0不正确
-
运算符
-
$((运算式)) 、 $[运算式] 、 expr m + n (中间要有空格,如果希望expr计算结果赋值给变量,需要使用``)
-
+、-、/、\ *
-
案例:求出命令行给出的两个参数的和
-
-
条件判断
- 语法:[ condition ] (中间要有空格,非空为true)
- 常用条件判断
- 字符串使用=
- 数字比较
- -lt
- -le
- -eq
- -gt
- -ge
- 权限判断
- -r
- -w
- -x
- 文件类型判断
- -f:文件存在且为常规文件
- -e:文件存在
- -d:文件存在并为目录
-
if流程控制
-
语法:
if[ 条件判断 ] then 代码 elif[ 条件判断 ] then 代码 fi
-
案例
- 判断ok等于ok
- 判断23是否大于22
- 判断/root/a.txt是否存在
- 输出成绩,60及格
-
-
case流程 控制
-
语法
case $变量名 in "值1") 代码 ;; "值2") 代码 ;; *) 匹配失败代码 ;; esac
-
-
for流程循环
-
语法1
for 变量 in 值1 值2 值3 do 代码块 done
-
语法2
for((初始值;循环控制条件;变量变化)) do 代码块 done
-
-
while循环
-
语法(while和[]之间有空格,[ ]有空格)
while [ ] do 程序 done
-
-
read读取控制台输入的内容
- read [选项] [参数]
- -p:提示符
- -t:等待时间,秒
- 参数:指定去读值的变量名
- read [选项] [参数]
-
系统函数
- basename基本使用
- basename xxxx.txt. .txt
- dirname基本使用
- dirname xxxxx.txt
- basename基本使用
-
自定义函数
-
语法
定义: function funname(){ action return } 调用: funname 值...
-