目录
shell介绍
shell介于内核与用户之间,负责命令的解释
一、shell脚本
- 就是将需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译
- 若干命令 + 脚本的基本格式 + 脚本特定语法 + 思想 = shell脚本
1么时候用到脚本:
重复化,复杂化的工作,通过把工作的命令写成脚本,以后仅仅需要执行脚本就能完成这些工作
- 自动化分析处理
- 自动化备份
- 自动化批量部署安装
- 等等
二、脚本的基本写法
三、通配符
我有这么些文件
四、rename批量重命名
五、变量的分类
1.本地变量:
- 本地变量:
当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效
2.环境变量:
- 环境变量:
当前进程有效,并且能够被子进程调用
查看当前用户的环境变量 env
查询当前用户的所有变量(临时变量和环境变量) set
export 将当前变量变成环境变量
当第三方下载的软件命令找不到时,可能是环境变量没有添加,永久生效需要在/etc/profile文件中添加一行 export PATH=…:$PATH
3.全局变量:
- 全局变量:
全局所有的用户和程序都能调用,且继承,新建的用户也默认能使用
4.系统变量(内置bash中变量):
shell本身已经固定好了它的名字和作用
这是我写的lin.sh
此处的.sh文件没有可执行权限,给它添加一个
看,添加可执行权限后变绿了
六、变量的定义
unset 变量名(是取消变量)
七、变量的定义规则
不能以数字开头,可以用字母,_ ,开头,变量名不能有特殊字符
八、数组
- 普通数组:只能使用整数作为数组索引(元素的下标)
- 关联数组:可以使用字符串作为数组索引(元素的下标)
1.普通数组的定义:
这样写也可以
2.关联数组的定义及获取:
九、交互式定义变量(read)
主要用于让用户去定义变量值
十、删除变量内容(扩展)
十一、简单的四则运算
算术运算:默认情况下,shell就只支持简单的整数运算
+ - * / %(取模,求余数)
默认的shell不支持小数运算,想让它可以小数运算可以使用bc
yum install -y bc.x86_64
十二、条件判断
-s选项(测试看看文件里有没有内容)
1.文件权限相关的判断:
2.两个文件的比较判断:
3.整数之间的判断:
4.字符串之间的判断:
5.多重条件判断:
6.字符串比较:
7.[ ] 和 [[ ]]的区别:
十三、流程控制语句(if)
十四、案例1(判断当前主机是否能和远程主机ping通)
思路:
- 使用哪个命令实现 ping -c
- 根据命令的执行结果状态来判断是否ping通 $?
- 条件判断,流程控制
1.优化1:
2.优化2:
十五、案例2(判断一个进程是否存在)
思路:
- 查看进程的相关命令 ps -ef;pgrep;ps -aux;pidof;
- 根据命令的返回状态值来判断进程是否存在 $?
- 根据逻辑用脚本实现
这里pgrep可以用pidof
十六、循环语句
1.for循环:
- 列表循环:用于将一组命令执行已知的次数
- 不带列表循环:不带列表的for循环执行时由用户指定参数和参数的个数
- 类c风格的for循环:
①.案例1(计算1-100的奇数之和)
思路:
- 定义一个变量来保存奇数的和 sum=0
- 找出1-100的奇数,保存到另一个变量中
- 从1-100中找出奇数后,再相加,然后将和赋值给sum变量
- 遍历完毕后,将sum的值打印出来
这里脚本里的运算采用的是四则运算
2.循环控制:
①.案例2(输入一个正整数,判断是否为质数)
质数(素数):只能被1和它本身整除的数
思路:
- 让用户输入一个数,保存到一个变量里
- 如果能被其他数整除就不是质数
- 如果输入的是1或者2,直接先排除掉
- 测试序列从2开始,输入的是4–>得出结果$sum不能和$i相等,并且$sum不能小于$i
②.案例3(批量增加5个新用户,以lin1-lin5命名,并统一加一个新组,组名为chaochao,统一该密码为123456)
思路:
- 添加用户的命令useradd
- 判断组是否存在
- 根据题意,判断该脚本循环5次来添加用户
- 给用户设置密码,应该放到循环体里面
③.案例4(批量创建5个新用户test1-test5,要求这几个用户的家目录都在/rhome 提示:需要判断该目录是否存在)
④.案例5(写一个脚本,局域网内,把能ping通的ip和不能ping通的ip分类,并保存到两个文本文件里,这是一个局域网内机器检查通讯的一个思路)
不过这样子是串行执行的,如果主机太多的话,要等好久好久好久的
3.while循环:
条件为真就进入循环,条件为假就退出循环
①.用while循环计算1-50的偶数和:
4.until循环:
条件为假进入循环,条件为真退出循环
语法结构和while一样