第1章 shell基础
1.1 什么是shell
Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出屏幕返回给用户。
1.1.1 shell对话方式
交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到Shell的回应,一问一答的方式
非交互式:shell脚本
1.2 为什么使用shell编程
作为一个合格的运维人员必须掌握一种或一种以上的脚本语言,shell编程则是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,可以把繁琐重复的命令写到shell脚本中执行,节约时间,有效的提高运维人员的工作效率,减少不必要的重复工作时间。
1.3 系统中的shell
linux系统默认shell是bash
[root@zeq ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh
第2章 变量
2.1 什么是变量
x+y=20 x=10 y=? 未知数(变量)
一个未知数,随时可以变化的量叫变量
2.2 变量的分类
2.2.1 普通变量(局部变量)
只能在当前环境下使用,可以通过export命令临时把普通变量变为环境变量使用
[root@zeq ~]# ip=10.0.0.201 给变量赋值(把数据存放到变量中) [root@zeq ~]# echo $ip 10.0.0.201
2.2.2 环境变量(全局变量)
1.大写
2.系统定义的
3.在大部分地方可以使用
2.2.3 特殊变量
$1 $2 $数字 $后数字是几代表shell脚本第几个参数
$# shell脚本中参数的个数
判断脚本的参数个数
$? 上一个命令的执行结果(返回值)
0 执行正确
非0 执行失败
$0 脚本文件名
第3章 shell脚本的书写规范
3.1.1 脚本存放位置
为了防止脚本乱放,统一存放在/server/scripts/中
创建目录
[root@zeq ~]# mkdir -p /server/scripts/ [root@zeq ~]# cd /server/scripts/
3.1.2 脚本编辑使用vim
3.1.3 选择解释器
在执行bash脚本的时候,内核会根据"#!"后的解释器来确定该用那个程序解释这个脚本中的内容。
[root@zeq ~]# vim /server/scripts/cal.sh #!/bin/bash
3.1.4 文件名书写
文件名称一定要有意义,方便看出是干嘛用的脚本,并且以.sh结尾
3.1.5 书写脚本的规范和习惯
1、 放在统一目录下,方便查找
2、 书写脚本要用vim编辑,
批量删除
批量增加
1.进入批量编辑模式(可视块)esc下ctrl+v
2.选择 批量增加的范围
3.按 shift + i 进行修改
4.按esc 退出等等
3、 脚本文件名称以.sh结束
4、 脚本开头一定要指定解释器
5、 脚本中#代表注释,#后的内容不会执行,不用的命令等可以用#注释掉,脚本中尽量不要出现中文注释以免出现因字符集不同产生乱码
6、 代码符号书写规范
1.成对的符号一定要都写出来再添加内容,避免遗忘漏写;如 "" '' []等
2.流程控制语句一次书写完,再添加内容;(if 条件 ; then 内容;fi)
3.书写的代码符号都是英文输入法格式
4.通过缩进让代码易读
第4章 shell练习
书写一个计算器脚本
4.1 数字计算方法
[root@zeq ~]# awk 'BEGIN{print 1/2}' 0.5
4.1.1 命令行中的变量 放在awk中使用
awk -v变量=赋值 变量名称自己定义
[root@zeq ~]# awk -vnum1=10 -vnum2=20 'BEGIN{print num1/num2 }' 这里变量为num1和num2 0.5
4.1.2 书写脚本计算10与20的加减乘除
[root@zeq]# vim cal.sh #!/bin/bash n1=10 n2=20 awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
执行脚本
[root@zeq /server/scripts]# sh cal.sh 30 -10 200 0.5
4.1.3 定义特殊变量 通过命令行传递参数方式进行计算
[root@zeq /server/scripts]# vim cal.sh #!/bin/bash n1=$1 第一个参数 n2=$2 第二个参数