Shell脚本入门
前言
本专栏是博主在B站自学Shell编程的笔记,由于不想把笔记保存在电脑里占硬盘的空间,所以挂到了CSDN服务器上,仅供个人使用,大家要是感兴趣也可以学习。
这是博主在B站自学的视频链接:【千锋Linux】Shell脚本入门全套教程_哔哩哔哩_bilibili
Shell概述
功能:
1.自动化系统初始化程序(例如:update,软件安装,时区设置,安全策略...)
2.自动化批量软件部署程序(LAMP,LNMP,Tomcat,LVS,Nginx)
3.管理应用程序(KVM,集群管理扩容,MySQL的升级部署,备份等,DELLR720批量RAID)
4.日志分析处理程序(PV(打印出网站的访问量),UV(点击量),200(访问时200的有多少条),!200,top100(访问网站最多的IP前100个),grep/awk)
5.自动化备份恢复程序(MySQL完全备份(无论是周一还是周二都是全部备份,周2包含周1的)/增量备份(周2的不包含周1的,只是周2增加的)+Crond(定时规划))
6.自动化管理程序(批量远程修改密码,软件升级,配置更新)
7.自动化信息采集及监控程序(收集系统/应用状态信息,CPU,内存,磁盘,网络,apache和mysql的健康状态,TCP状态(ss -tunlp)) #会实现实时的网络流量,网络开销,磁盘负载和使用情况,CPU的负载,内存的使用情况,以及TCP各种状态的情况和apache,mysql健康状态的情况
8.配合Zabbix信息采集(收集系统/应用状态信息,CPU,内存,磁盘,网络,apache和mysql的健康状态,TCP状态)
9.自动化扩容(增加云主机→业务上线) zabbix监控CPU 80% + Python API AWS/EC2 (增加/删除云主机) + Shell Script(业务上线)
10.俄罗斯方块,打印三角形,打印圣诞树,打印五角星....
11.Shell可以做任何事(一切取决于业务需求)
Shell与其他编程语言的对比
C ------编译 -------二进制机器码 (CPU CPU架构: x86复杂指令集,Power精简指令集,APM)
java --------编译 -------字节码(Java虚拟机 JDK) Tomcat/Hadoop用java开发的
Shell --------解释 /usr/bin/bash
Python -------解释 /usr/bin/python
--------编译 -------字节码(Python虚拟机)
程序是由哪些组成:逻辑+数据
Bash中调用python没听懂,隔一段时间再来听吧
bash shell
Shell是什么: 就是命令解释器
什么是shell命令: 就是能够在shell下执行的命令
红色和蓝色的都是在进Shell之后执行的,而黄色的是在离开Shell执行的
GNU/bash shell特点
1.命令和文件自动补齐
2.命令历史记忆功能 上下键,!number, !string, !$(上一个命令最后的参数), !!(上一个命令), ^R
3.别名功能 alias(查看别名), unalias cp(取消别名), ~username/.bashrc, cp -rf /etc/hosts
4.快捷键: ^R(搜索一个历史命令), ^D(退出), ^A(将光标移到命令的首位), ^E(将光标移到命令的末位), ^L, ^U(删除光标前面的), ^K(删除光标后面的), ^S(锁屏), ^Q(解锁)
5.前后台作业控制 &(后台),nohup, ^C, ^Z(暂停), bg%1, fg%1(调回), kill%3,screen
6.输入输出重定向 0,1,2 >(输出重定向覆盖) >>(输出重定向追加) 2>(错误输出) 2>>(追加) 2>&1(描述符为2的内容重定向到1) &> cat < /etc/hosts cat << EOF cat>file1 <<EOF
7. 管道 | tree
8.命令排序
; 不具备逻辑判断
cd; eject
&& || 具备逻辑判断
注意:
command & 后台执行
command &> /dev/null 混合重定向(标准输出1,错误输出2)
command1 && command2 命令排序,逻辑判断
9.Shell通配符(元字符) 表示的不是本意
问号不常用,其他需要记
小知识:
echo 输出带颜色文本
printf 格式化输出文本
Shell 变量
Shell变量?用一个特定的字符串去表示不固定的内容
变量的类型:
1.自定义变量
定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写
引用变量: $变量名 或${变量名}
查看变量: echo $变量名 set(所有变量: 包括自定义变量和环境变量)
取消变量: unset 变量名
作用范围: 仅在当前shell中有效 ----相当于python中的局部变量
2.环境变量
定义环境变量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例如env | grep back_dir2
取消环境变量: unset 变量名
变量作用范围: 在当前shell和子shell有效 -----相当于python中的全局变量
======================================================
C语言 局部变量 vs 全局变量
SHELL 自定义变量 vs 环境变量
这张图告诉我们可以创建一个存储公共变量的脚本文件,然后再在其余子脚本文件中执行这个脚本文件,也就是如图public.sh和1.sh在当前shell,所以没必要创建环境变量。环境变量只是在系统中用的多一点
3.位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
4.预定义变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值0表示成功
变量的赋值方式:
1.显示赋值
变量名=变量值
示例:
ip=192.168.1.251
school="Beijing 1000phone"
today1='date +%F'
today2=$(date +%F)
2.read 从键盘读入变量值
read 变量名
read -p ”提示信息:” 变量名
read -t 5 -p "提示信息:" 变量名
read -n 2 变量名
变量的运算
法二和法四用的最多
变量内容的删除 替换 替代
Shell条件测试
什么是条件测试: 判断某一个对象是不是成立的
文件测试: 主要用于测试文件是不是一个常规文件,设备文件 ,链接文件,管道文件,是否有执行权限,写权限,甚至测试文件是否存在
![]()