简介
shell脚本
日常运维工作大部分是一些繁琐的重复的工作,每天80%的工作就是重复干昨天的事情,而且工作量还比较大,这就可以让机器操作这些工作。
一个简单脚本
1 | 安装Nginx的脚本 |
脚本规范
-
不要写中文,就算注释也最好不要中文
-
#代表注释,#!不是注释,是表示运行的环境
-
脚本最好标明作者、创建时间、描述
-
脚本组成
- 解释环境 #!/usr/bin/env bash|python|perl
- 注释说明
- 执行代码
运行脚本:
- 给执行权限chmod 700 install_nginx.sh,然后./install_nginx.sh
- 解释器直接运行,不需要给权限,直接bash install_nginx.sh
shell语法
shell中的特殊符号
1 | ~: 家目录 # cd ~代表进入用户家目录 |
管道
| 管道符在shell中使用时最多的,很多组合命令都需要通过组合命令来完成输出。管道符其实就是下一个命令对上一个命令的输出做处理
shell重定向
1 | 重定向输入 覆盖原数据 |
shell数学运算
1 | expr命令:只能做整数运算,格式比较古板,注意空格 |
或者使用bc程序交互计算
1 | [root@VM-24-12-centos ~]# bc |
脚本方式
1 | [root@VM-24-12-centos ~]# echo "scale=2;141*100/7966"|bc |
双小圆括号运算,在shell中(())也可以用来做数学运算
1 | [root@VM-24-12-centos ~]# echo $((100+3)) |
格式化输出echo
echo
shell基本输入
read命令
变量
在编程中,我们总有一些数据需要临时存放在内存,以待后续使用时快速读出。内存在系统启动的时候被按照1B一个单位划分为若干个块,然后统一编号(16进制编号),并对内存的使用情况做记录,保存在内存跟踪表中。
变量分类:
1.本地变量︰用户私有变量,只有本用户可以使用,保存在家目录下的.bash_profile、.bashrc文件中
2.全局变量:所有用户都可以使用,保存在/etc/profile、letc/bashrc文件中
3.用户自定义变量:用户自定义,比如脚本中的变量
定义变量:
变量格式:变量名=值
在shell编程中的变量名和等号之间不能有空格
1 | 变量名命名规则: |
读取变量内容:
读取变量内容符:$
读取方法:$变量名
取消变量unset:
unset name
定义全局变量export:
export name=‘codechen’
上述设置的变量其实都是一次性变量,系统重启就会丢失。
如果希望本地变量或者全局变量可以永久使用,可以将需要设置的变量写入变量文件中即可。
定义永久变量:
本地变量:用户私有变量,只有本用户可以使用,保存在家目录下的.bash_profile、.bashrc文件中
全局变量:所有用户都可以使用,保存在/etc/profile、letc/bashrc文件中
1 | 本地变量 |
数组
语法:
1 | 数组名称=(元素1 元素2 元素3 ...) |
数组读出
1 | {数组名称[索引]} |
数组赋值
方法一:一次赋一个值
1 | array0[0]='tom' |
方法二:一次赋多个值
1 | array2=(tom jack alice) |
查看数组
1 | declare -a |
访问数组元素
1 | echo ${array1[0]} # 访问数组中的第一元素 |
遍历数组
-
默认数组通过数组元素的个数进行遍历
-
针对关联数组可以通过数组元素的索引进行遍历
关联数组
关联数组可以允许用户自定义数组的索引,这样使用起来更加方便、高效
定义关联数组
申明关联数组变量
1 | declare -A ass_array1 |
关联数组赋值
方法一:一次赋一个值
1 | 数组名[索引]=变量值 |
方法二:一次赋多个值
1 | ass_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell') |
查看数组
1 | declare -A |
访问数组元素
1 | echo ${ass_array2[index2]} # 访问数组中的第二个元数 |
遍历数组
通过数组元数的索引进行遍历,针对关联数组可以通过数组元素的索引进行遍历
shell流程控制-if判断语句
一、shell中的运算
数学比较运算
1 | -eq # 等于 |
字符串比较运算
1 | 运算符解释,注意字符串一定别忘了使用引号引起来 |
文件比较检查
1 | -d # 检查文件是否存在且为目录 |
逻辑运算
1 | && # 逻辑与运算 |
赋值运算
1 | = # 赋值运算符 a=10 name='baism' |
if语句
语法:
1 | 一 |
shell流程控制-for循环语句
语法一:直接赋值
1 | for var in value1 value2 ...... |
语法二:命令赋值
1 | for var in `seq 1 9` |
语法三:赋值是一个字符串
1 | for var in baism\'s is cool, baism\'s is nice |
循环控制语句
sleep N脚本执行到该步休眠N秒
1 | echo -n"倒计时: " |
continue跳过循环中的某次循环
1 | for ((i=1;i<10;i++)) |
break跳出循环继续执行后续代码
1 | for i in 'seq 1 9` |
案例分享–学员信息系统
1 | !/bin/bash |