一、shell前言
1.什么是shell?
shell:壳,命令解释器,一种应用程序
2.shell语言的特点
shell语言是指unix操作系统的命令语言,同时又是该命令语言的解释程序的简称
shell本身是一个用C语言编写的程序,他是用户使用Unix/Liunx的桥梁,用户大部分工作都是通过shell完成的
shell既是一种命令语言,有是一种程序设计语言,作为命令语言,他交互式的解释和执行用户输入的命令
作为程序设计语言,定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支
他虽然不是Unix/Liunx系统内核的一部分,但他调用了系统核心的大部分功能来执行程序
建立文件并以并行的方式是协调各个程序的执行
因此,对于用户来说,shell是最重要的实用程序
深入了解和熟练掌握shell的特性及其使用方法,是用好Unix/Liunx系统的关键
3.shell能做什么?
- 自动化批量系统初始化程序(update,软件安装,时区设置,安全策略。。)
- 自动化批量软件部署程序(LAMP,LNMP,Tomcat,LVS,Nginx)
- 应用管理程序(KVM,集群管理扩容,MySQL,DELLR720批量RAID)
- 日志分析处理程序(PV,UV,200代码,1200代码,top100,grep/awk)
- 自动化备份恢复程序(MySQL完全备份/增量+Crond)
- 自动化管理程序(批量远程修改密码,软件升级,配置更新)
- 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySOL)
- 配合Zabbix信息采集(收集系统/应用状态信息,CPUMem,DiskNet,TCP Status,Apache,MySQL)
- 自动化扩容(增加云主机------>业务上线)zabbix监控CPU80%+|50%Python API AWS/EC2(增加/删除主机)+ Shell Script(业务上线)
- 俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,担克大战,排序算法实现
- Shell可以做任何事(一切取决于业务需求)
4.shell执行方式
准备测试脚本
vim file
echo "hello 2024"
read -p "请输入你的名字:” name
echo "‘哈哈 $name 是帅哥”
- bash file1 第一种和第二种是同一种
- sh file1
- . file1
- source file1
- 区别:前两种是子shell,执行后不改变目录,后两种是本shell,执行后改变目录
5.shell解释器在哪
cat /etc/shells
chsh -l
二、变量
shell变量:用一个固定字符串去表示不固定的内容,便于修改
1.自定义变量
1.1简述
用户自定义变量是最常用的变量类型,其特点是变量名和变量值都是由用户自由定义的
1.2定义变量
变量名=变量值
例如:name=xulei
注意规则:
变量名不能以数字开头,只能使用英文字母,数字和下划线
等号左右两侧左右不能有空格,但可以使用下划线
变量的值如果有空格,必须用引号包含
不能使用标点符号
不能使用bash里的关键字
变量名,请使用五个字母以上
1.3变量调用
echo $name 输出变量
1.4重复定义变量
重复定义变量会进行变量覆盖
想要叠加的话
aa=123
aa="$aa"456
或aa=${aa}456
1.5变量查看
set 查看所有变量
1.6变量删除
unset 变量名
1.7交互定义变量
read从键盘读入变量值
read 变量名
三种引号
1.""弱引用
school=1000phone
输出:echo ${shool} is good 没有使用引号,被解释为多个命令
2.''强引用
echo "${school} is good" 脱去空格
输出:1000phone is good
3.··转义符号(键盘~下的符号)
echo `${school} is good` 脱去所有字符
输出:${school} is good
shool=·date·
输出:时间 反引号优先执行,限制性date命令,在执行定义变量
2.整数运算
2.1方法一:expr
语法
expr 1 + 2
expr $num1 + $num2
+加 -减 \*乘 /除 %取余
2.2方法二:$(())
echo $(($num1+$num2))
echo $((num1+num2))
echo $((5-3*2))
echo $((2**3)) 2的3次方
sum=$((1+2)); echo $sum 分号可一行执行几条语句
2.3方法三:$[]
echo $[5**2]
2.4方法四:let
let sum=2+3; echo $sum
let i++; echo $1
3.小数运算
提前安装bc计算机程序
echo “2*4” | bc
echo "2^4" | bc
echo "scale=2;6/4" | bc
bc交互运算器,支持浮点运算 scale=2 保留小数点后两位
4.环境变量
自定义变量,只能在当前shell生效,其他shell是不生效的
env 查看环境变量
定义环境变量:
方法一:export back_dir1=/home/backup 声名环境变量
方法二:export back_dir2 将自定义变量转化为环境变量 转换环境变量
变量作用范围:在当前shell和子shell生效
bash 打开子shell
要想在当前用户登录后每个shell中都可以用,可将变量放到 ~/.bash_profile
export aaa=123456
要想在所有用户登录后每个shell中都可以用,可将变量放到 /etc/profile
5.位置变量和预定义变量
5.1位置变量,相当于java中的参数
$0 $1$2$3$4$5$6$7$8$9
命令 参数1参数2参数3参数4参数5参数6参数7参数8参数9
案例
指定脚本程序,用户自行输入两门学科成绩,自动算出平均数
vim avg.sh
#!/bin/bash
echo "($1+$2)/2" | bc
chomd +x avg.sh
./avg.sh 20 30 ------->25运行程序
思考:位置变量和read读取变量,到底用哪个?————》用谁都可以
5.2预定义变量
$0 脚本名/程序名
$* 用户输入的所有参数
$# 参数的个数
$? 上一个程序的返回值(0成功,非0失败)
$$ 当前进程序的id
示例
vim avg.sh
#!/bin/bash
echo "($1+$2)/2" | bc
echo "该程序名为$0"
echo "该程序名使用了$#个参数" 运行时输入几个参数有几个参数
$*可用在用户输入信息时收集信息