1.shell脚本编写规范
1,声明解释器
#!/bin/bash
2,编写注释
#可以描述脚本功能、变量作用等信息
3,执行指令
2.脚本的执行方式
1,为脚本添加x权限,使用相对或者绝对路径执行
2,使用解释器程序执行脚本,无需x权限
3,使用source命令执行脚本,无需x权限
3.重定向扩展
> 重定向标准输出
2> 重定向错误输出
&> 重定向所有输出
4.位置变量与预定义变量
$1 执行脚本时后面第1个位置参数
$2 执行脚本时后面第2个位置参数
$3 执行脚本时后面第3个位置参数
$* 执行脚本时后面所有位置参数
$# 执行脚本时后面位置参数的个数
$$ 随机进程号
$? 判断上一条指令是否执行成功,0是成功,非0是失败
5.引号和反撇号
" " 双引号 界定范围 ' ' 单引号 界定范围 屏蔽特殊符号的功能 ` ` 反撇号 获取命令的执行结果,还可以使用$( )实现相同效果
6.使用read指令
read -p "请输入用户名" u //-p是可以定义提示信息,u相当于自定义变量名称,可以存储用户看到提示信息后输入的字符
stty -echo 屏蔽回显 stty echo 恢复回显
7.运算
expr 运算并输出结果 $[ ]或者$(( )) 运算 echo 命令查看 使用let命令实现变量的自增减
8.逻辑组合
条件 && 指令 条件成功才执行指令 条件 || 指令 条件失败才执行指令
9.数字
-eq 是否相等 -ne 是否不等 -gt 是否大于
-ge 是否大于等于 -lt 是否小于 -le 是否小于等于
10.文件
-e 判断文件是否存在,不关心类型
-f 判断文件是否存在,必须是普通文件
-d 判断文件是否存在,必须是目录
-r 判断当前用户对文件是否有读权限,对root无效
-w 判断当前用户对文件是否有写权限,对root无效
-x 判断当前用户对文件是否有x权限
11.if分支
1.单分支
if 条件测试;then //满足条件的话就执行下面指令
执行指令
fi
2.双分支
if 条件测试;then //满足条件的话就执行下面指令
执行指令A //指令可以是一条,也可以是多条
else //否则,不满足条件的话就执行下面指令
执行指令B
fi
3.多分支
if 条件测试;then //满足条件的话就执行下面A指令
执行指令A //指令可以是一条,也可以是多条
elif 条件测试;then //满足条件的话就执行下面B指令
执行指令B
elif 条件测试;then //满足条件的话就执行下面C指令
执行指令C
else //否则,不满足条件的话就执行下面指令
执行指令
fi
12.循环,可以反复执行某任务
for循环,可以定义循环次数
for 变量名称 in 值1 值2 值3 。。。。 //此处变量名可以自定义,通常习惯
用i,值的多少决定了下面do与done之间的任务执行多少次,每个值之间有空
格,这里是有3个值,所以就循环执行指令3次
do
任务
done
13.while循环,可以根据条件决定循环次数,也可以实现无限循环
while 条件测试 //根据条件的结果决定是否要执行任务,条件测试成
功的话就执行,如果失败立刻结束循环
do
任务
done
: //冒号代表永远正确
14.循环的控制
exit 可以终止循环,但脚本也终止
break 可以终止循环,继续循环后的任务
continue 可以终止当前循环,继续下一次循环
15.case分支,功能类似if,编写时语句比if精简
case 调用的变量名 in
模式1)
指令;;
模式2)
指令;;
*)
指令
esac
16.函数,可以利用一个名称存储公共的语句块,实现
精简脚本方便后期调用的目的
函数名(){
指令
}
17.字符串的处理
1.字符串的截取
${变量名称:截取位置:截取长度}
2.字符串替换
${变量名/旧/新}
3.字符串的删除,可以删除两边
${变量名#要删除的内容} 掐头
${变量名%要删除的内容} 去尾
定义变量初值(备用)
${变量名:-初值}
18.正则表达式
\w匹配数字、字母、下划线 \s 匹配空格、tab键
19.sed 流式编辑器
可以对文档进行非交互式增删改查,逐行处理
用法:
1,前置指令 | sed 选项 条件 指令
2,sed 选项 条件 指令 被处理文档
选项 -n 屏蔽默认输出 -r 支持扩展正则 -i 修改源文件
指令 p 输出 d 删除 s 替换 a 行下追加 i 行上添加 c 替换整行
条件 行号 /字符串/
20.awk
可以实现精确搜索并输出 ,逐行处理
1,前置指令 | awk 选项 条件 指令
2,awk 选项 条件 指令 被处理文档
选项 -F 定义分隔符
指令 print
条件 /字符串/
内置变量 $1第一列 $2第二列 $3第三列 ...
$0 所有列 NR行号 NF 列号
21.awk的条件
1,/字符串/ 还可以使用正则 ~ 包含 !~不包含
2,使用数字或者字符串
3,逻辑组合 &&并且 ||或者
22.awk处理时机,可以执行额外任务
BEGIN任务 执行1次,读取文档之前执行
逐行任务 执行n次,读取文档时执行
END任务 执行1次,读取文档之后执行
23.使用awk数组+for循环实现高级搜索
数组 相当于可以存储多个值的特殊变量
数组名[下标]=下标对应的值
for(变量名 in 数组名){print 变量名} //这个格式可以查看数组的所有下标