shell脚本
-
构成:
-
语法和命令
-
变量
-
- 自定义变量
```
#变量名=变量值(等号左右不能有空格)
page_size=1
page_num=2
# 将命令复制给变量
_ls=ls
#将命令结果赋值给变量
first_list=$(ls-a)
# 默认字符串,不会进行 + 运算
total=page_size*page_num #(错误)
#声明变量为整型
let tatal=page_size*page_num
declare -i total=page_size*page_num
# 导出环境
export total
declare -x total
```
注意:
- 环境变量
- 运算符和引用
- 管道
作用:将前一个命令的结果传递给后面的命令
语法:cmd1 | cmd2
要求:管道右侧的命令必须能接受标准输入才行,比如grep命令,ls、mv等不能直接使用,可以实用xargs预处理
注意:管道命令仅仅处理stdout,对于stderr会予以忽略,可以使用`set -o pipefail`设置shell遇到的管道错误退出。
- 重定向
- 判断命令
shell中提供了`test`、`[`、`[[`三种判断符号可用于:
- 整数测试
- 字符串测试
- 文件测试
语法:
- `test condition`
- `[condition]`
- `[[condition]]`
- 分支语句
```
# 语法1:
if condition;then
程序段
elif condition;then
程序段
else
程序员
fi
# 语法2
case $变量in:
"第一个变量内容")
程序段
;;
"第一个变量内容")
程序段
;;
*)
程序段
;;
esac
```
- 循环
- `while`循环
`while condition;do 程序段;done`
- `util`循环
`utill cindition;do 程序段done`
- `for`循环
`for var in [words...];do 程序段;done`
- 函数
- 语法一
`funcName(){echo"abc";}`
- 语法二
`function funcName(){echo"abc";}`
- 模块化
模块化的原理是在当前shell内执行函数文件,方式:
`source[函数库的路径]`
-
执行过程和原理
-
shell脚本一般以.sh结尾,也可以没有,这是一个约定。
#! /bin/bash #! /usr/bin/env bash -
启动方式
# 文件名运行 ./filename.sh # 解释器运行 bash ./filename.sh # source运行 source ./filename.sh -
执行过程
- 字符解析
- shell展开
- 重定向,将stdin、stdout、stderr的文件描述进行只想变更
- 执行命令
- 收集状态并返回
-
-
总结