本章正题:shell编程基础
1.1 shell基础
1.1.1 为什么要学习shel编程
1. linux系统批量管理
2. 提升工作效率
3. 减少重复工作
4. 懒
1.1.2 学好shell编程所需的基础知识
1. 熟练使用vim编辑器
2. 熟悉ssh终端
3. 熟练掌握linux常用命令
4. 熟练掌握linux正则表达式及三剑客命令
1.1.3 如何学好shell编程
1. 阅读,模仿
2. 核心:多练→多思考→再练→在思考,坚持循环
3. 大忌:不可别人的直接用,可以模仿,但自己要理解了掌握了才行
1.1.4 shell学习要求
1. 看懂简单脚本
2. 尝试写脚本
3. 变量,循环,判断
1.1.5 基础知识
1.什么是shell
1)命令解释器
2) CentOS默认的shell是bash
2.什么是shell脚本
1)命令大礼包,一个程序文件,包含若干行linux命令
2)循环,条件语句e
3).sh
4)文件类型:file shell script
1.1.6 创建shell脚本
1. vim创建,带颜色
2. 第一行写#!/bin/bash,指定默认shell为/bin/shell
注:不写的话,用file查看文件类型,就是个ASCII文本
#!/bin/bash
#author:georgekai
#date:20180111
#ver:1.1.1
#desc:
脚本内容:
1.1.7 shell脚本了解
1. 什么是变量:用一个固定的字符串,代替更多更复杂的内容
2. 变量的组成:字母、数字、下划线组成
注:变量的开头不能是数字,可以是echo KAI=10 ,也可以是echo _KAI=10, 但不可以是echo 3KAI=10
3. 变量的分类:局部变量、全局变量、特殊变量
1.1.8 局部变量(普通变量)
1.只能在当前环境下起作用,脚本中不起作用
2.取变量的内容:1) 空格:中间会留下空格,如:echo $KAI 5 8 5
2){} :不会留下空格,紧挨着,如:echo ${KAI}5 85
1.1.9 全局变量(环境变量)
1.系统的大部分全局变量都在env下面放着
2.手动创建临时的全局变量:export KAI=10
永久生效:将export KAI=10放在/etc/profile下面
3.linux中其它地方都可以使用
4.取消全局变量:unset george
注:export 和 source的区别
1). source /etc/profile : 让profile在当前环境中生效
2). export : 在全局中生效
1.1.10 环境变量的文件
1. /etc/profile :环境变量,别名
2. /etc/bashrc :别名
3. /etc/profile.d/ :1). 用户登录到系统之后就会立刻运行这个目录下的脚本 2). 要对脚本有执行权限x
测试小工具:yum install sl cowsay -y
(sl :显示小火车 cowsay $(hostname):显示主机名和小奶牛)
注:fmted与profile.d的区别
/etc/motd :文件中放什么显示什么
/etc/profile.d/ :运行这个目录下面的脚本
4. ~/.bashrc :局部存放别名
5. ~/.bash_profile:局部变量
1.1.11 特殊变量($数字 $0 $# $?)
1. awk中变量的使用
awk -vn1=3 -vn2=5 'BEGIN{print n1+n2,n1*n2,n1/n2}'
注:-v :让awk中可以使用变量,多个变量就用多个-v
2. 跟位置有关的变量 $n (n:表示数字)
在脚本中 $1 $2: 表示第一个参数和第二个参数
把命令行的内容,通过$1 $2传递到脚本中
3. vim多行批量添加
1.ctrl + v
2. 方向键选择添加的位置
3.大写字母A
4.添加要批量添加的内容
5.多按几次esc
4. vim多行批量删除
1.ctrl+v
2.方向键选择
3.del 或者 d 或者x,建议用x
5. $0 表示脚本的名字
6. $# 表示脚本参数的个数
7. $? 上一个命令的返回值,看上一个命令是否执行正确
注:0 :执行正确 非0:执行不正确
例:ls /odlboy/
echo $? 查看ls /kai/是否执行成功
1.1.12 如何向变量中放东西 read
注:以下w是脚本中第一个参数,k是第二个。
1. 显示提示信息 -p
会出现提示信息,定义w和k的变量为100 200
[root@georgekai scripts]# read -p "please input h1 h2:" w k
please input h1 h2:100 200
查看w和k的变量:
[root@georgekai scripts]# echo $w $k
100 200
2. 指定超时时间为5秒 -t5
5秒后,会自动退出
[root@georgekai scripts]# read -t5 -p "please input h1 h2:" w k
please input h1 h2:[root@georgekai scripts]#
注:-p 一定要放在最后面
3. 实现类似passwd输入密码不显示的功能 -s
定义w的变量为123456,但输入的字符不会显示
[root@georgekai scripts]# read -s -p "passwd:" w
passwd:[root@georgekai scripts]#
查看w的变量:
[root@georgekai scripts]# echo $w
123456
1.1.13 把read -t5 -p "please input h1 h2:" w k 放入脚本中
注:如果要加-s的话,需要在read下面加个echo,就不会显示到同一行了
随便给wang和kai俩个变量定义个值就可以让脚本替换执行了
1.2 if判断(条件表达式)
1.2.1 判断一个文件或目录是否存在
1. 判断目录是否存在 [ -d /george/ ] | echo $?
0就是存在,非0就是不存在
2. 判断文件是否存在 [ -f /george/kai.txt ] | echo $?
0就是存在,非0就是不存在
例1:判断系统中是否存在/george/georgedir ,如果存在提示dir exist
[ -d /george/georgedir ] && echo "dir exist"
注:&& 表示前一个命令执行成功,后一个命令才执行
;表示前一个命令无论是否成功,都会执行后面的命令
例2: 判断系统中是否存在/george/kai.txt ,如果不存在就创建kai.txt
[ -f /george/kai.txt ] || touch /george/kai.txt
注:||表示前面命令执行不成功,后面的命令才会执行
1.2.2 比较大小
[ 1 -eq 1 ] (equal 等于==)
[ 2 -ne 1 ] (not equal不等于!=)
[ 2 -gt 1 ] (great than 大于>)
[ 2 -ge 1 ] (great equal大于等于>=)
[ 2 -lt 10 ] (less than 小于<)
[ 2 -le 10 ] (less equal小于等于<=)
注:man test 查看更多的判断使用
1.2.3 在脚本开头增加一个条件,判断参数的个数是否为2
1.单分支判断
注:1.$#表示参数的数量
2.如果没有exit,exit后面的命令都会执行
2.双分支判断
3.多分支判断
1.2.4 for循环
格式: for 变量名字 in stu{01..10}
do
echo $变量名字
done
例1:通过for循环优化系统开机启动项目
要保留的服务:crond network sshd rsyslog sysstat(管理工具有关)
chkconfig |greop3:on :检查是否执行成功
总结:
1. 变量名字的规则
2. 特殊变量-位置-状态
$n数字 $0 $# $?(查看编译安装是否安装成功)
3. 全局变量与局部变量的区别
4. 判断和循环
这章更新晚了半天,如果有什么不太理解的地方,欢迎留言
小伙伴们可以关注我的微信公众号:linux运维菜鸟之旅
关注“中国电信天津网厅”公众号,首次绑定可免费领2G流量,为你的学习提供流量!