续
- 基本监控系统脚本(CPU,内存,IO等)
- 后台服务监控、启动、停止脚本、数据备份脚本
- 利用grep、sed和awk的复杂用法处理文本
- 功能函数编写、主流程设计
- 具备复杂功能的大型脚本工具编写
变量替换
语法 | 说明 |
---|---|
${变量名#匹配规则} | 从变量开头进行规则匹配,将符合最短的数据删除 |
${变量名##匹配规则} | 从变量开头进行规则匹配,将符合最长的数据删除 |
${变量名%匹配规则} | 从变量尾部进行规则匹配,将符合最短的数据删除 |
${变量名%%匹配规则} | 从变量尾部进行规则匹配,将符合最长的数据删除 |
${变量名/匹配规则} | 变量内容符合旧字符串,则第一个旧字符串会被新字符串取代 |
${变量名//匹配规则} | 变量内容符合旧字符串,则全部旧字符串会被新字符串取代 |
字符串处理
计算字符串长度
1 | 方法一:${#string} |
获取字符索引位置
1 | 方法:expr index "$string" substr |
获取子串长度
1 | 方法:expr match "$string" substr |
抽取字符串中的子串
1 | 方法一: |
练习
1 |
|
命令替换
方法
方法一:command
方法二:$(command)
例子1:
获取系统的所有用户并输出1
2
3
4
5
6
7
8
9
#
index=1
for user in `cat /etc/passwd | cut -d ":" -f 1`
do
echo "This is $index user : $user"
index=$(($index+1))
done例子2:
根据系统时间计算今年或明年1
2echo "This is $(date +%Y) year"
echo "This is $(($(date +%Y) + 1)) year "例子3:
根据系统时间获取今年还剩下多少星期,已经过了多少星期1
2echo "This year have passed $(date +%j) days"
echo "This year have passed $(($(date +%j)/7)) weeks"例子4:
判定nginx进程是否存在,若不存在则自动拉起该进程1
2
3
4
5
6
7
8
#
nginx_process_num=$(ps -ef | grep nginx | grep -v grep | wc -l)
if [ $nginx_process_num -eq 0 ];then
#systemctl start nginx
brew services start nginx
fi
`` 和 $() 两者是等价的,但推荐使用 $() ,易于掌握;缺点是极少数Unix可能不支持
$(()) 主要用来进行整数运算,包括加减乘除,引用变量前面可以加$,也可以不加$
变量类型
声明变量类型为只读类型
declare -r var="hello"
声明变量类型为整形
declare -i
在脚本中显示定义的函数和内容
declare -f
在脚本中显示定义的函数
declare -F
声明数组
1 | declare -a array |
数学运算之expr
1 | | |
Nginx 监控脚本
1 |
|