shell编程一

2023-12-30 18:28:46

shell 定义

Shell 也是一种程序设计语言,它有变量,关键字,各种控制语句,有自己的语法结构,利用shell程序设计语 可以编写功能强、代码简短的程序
#! Shebang 定义解释器

shell的分类和切换

# cat /etc/shells?
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
默认shell: bash shell
centos中脚本使用的默认shell 为/usr/bin/sh ?
查看当前正在使用的shell
#echo $SHELL
shell 的切换
#vim /etc/passwd ? 编辑更改登录shell的类型

使用场景

什么时候不适合使用Shell编程:
? ? 1. 资源紧张的项目,特别是那些速度是重要因素的地方(排序,散序,等等)
? ? 2. 程序要进行很复杂的数学计算,特别是浮点计算,任意精度的计算,或者是复数计算
? ? 3. 要求交叉编译平台的可移植性(使用C或者是Java代替)
? ? 4. 需要结构化编程的复杂应用(需要变量类型检查和函数原型等等)
? ? 5. 对于影响系统全局性的关键任务应用。
? ? 6. 安全非常重要。你必须保证系统完整性和抵抗入侵,攻击和恶意破坏。
? ? 7. 项目由连串的依赖的各个部分组成。
? ? 8. 多种文件操作要求(Bash被限制成文件顺序存取,并且是以相当笨拙,效率低下的逐行的存取方式) 9. 需要良好的多维数组支持。
? ? 10. 需要类似链表或树这样的数据结构。
? ? 11. 需要产生或操作图象或图形用户界面。
? ? 12. 需要直接存取系统硬件。
? ? 13. 需要端口号或是socket I/O。
? ? 14. 需要使用可重用的函数库或接口。
? ? 15. 所有的私有的不开源的应用程序(Shell脚本的源代码是直接可读,能被所有人看到的)
?? ??? ?如果你需要有上面的任意一种应用,请考虑其他的更强大的脚本语言――Perl,Tcl,Python,Ruby,或者可能是其他更 高级的编译型语言,例如C,C++或者是Java

Shell 能做什么?

1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略...)
2. 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)
3. 应用管理程序 (KVM,集群管理扩容,MySQL,DELLR720批量RAID)
4. 日志分析处理程序(PV, UV, 200, !200, top 100, grep/awk)
5. 自动化备份恢复程序(MySQL完全备份/增量 + Crond)
6. 自动化管理程序(批量远程修改密码,软件升级,配置更新)
7. 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL) 8. 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)
8. 自动化扩容(增加云主机——>业务上线)
zabbix监控CPU 80%+|-50% Python API AWS/EC2(增加/删除云主机) + Shell Script(业务上 线)
9. 俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序实现?
10. Shell可以做任何运维的事情(一切取决于业务需求)

bash 初始化

用户登录时相关的bash配置文件 (登录脚本)
全局配置文件
? /etc/profile?
? /etc/profile.d/*.sh?
? /etc/bashrc
个人配置文件
? ~/.bash_profile
? ~/.bashrc
??
profile类的文件: 设定环境变量
?? ?运行命令或脚本
bashrc类的文件:?
?? ?定义命令别名
?? ?
用户登录时加载bash配置文件的过程
登录式shell加载配置文件优先级显示
?? ?~/.bash_profile --> ~/.bashrc --> /etc/bashrc?? ?--> /etc/profile --> /etc/profile.d/*.sh?
?? ?
非登录式shell加载配置文件优先级显示
?? ??? ?~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

shell 脚本执行规范

shell脚本文件需要以.sh结尾
第一个原因,让别人认的这个是shell脚本,sh后缀编辑时有高亮显示。
拓展名后缀,如果省略.sh则不易判断该文件是否为shell脚本
# 执行脚本方式
1、 sh 脚本.sh
2、 bash 脚本.sh
3、 ./脚本.sh ?# 需要执行权限
4、 . ?脚本.sh
5、 source 脚本.sh ?子影响父,改变当前shell环境

sh 和 source的区别:
?? ?sh:当使用sh来执行脚本时,它会创建一个新的子进程来执行脚本,并且脚本中的变量和环境设置通常不会影响当前的shell环境
?? ?source:使用source或.来执行脚本文件时,脚本中的命令会在当前Shell环境中执行,并且脚本可以修改当前Shell的变量和环境设置。

编辑脚本
#cat a.sh
#!/bin/bash
pwd
cd /opt
pwd
更换执行脚本方式执行显示如下

希望能够帮助到大家!

文章来源:https://blog.csdn.net/yz2322944912/article/details/135307469
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。