shell编程一

news2025/1/20 16:34:35

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
更换执行脚本方式执行显示如下

希望能够帮助到大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型:未来科技的新篇章

目录 1AI大模型:未来科技的新篇章 2AI超越数学家攻克经典数学难题;非侵入式设备解码大脑思维 1AI大模型:未来科技的新篇章 随着科技的飞速发展,人工智能(AI)已经成为了我们生活中不可或缺的一部分。而AI大…

Ubuntu22.04 安装教程

系统下载 Ubuntu官网下载 清华源镜像 安装流程 1. 选择安装语言 2. 选择是否在安装时更新 为了系统安装速度一般选择安装时不更新,安装后自行更新 3. 选择系统语言和键盘布局 4. 选择安装模式 5. 配置网络信息 6. 设置静态IP 7. 配置代理信息 8. 配置Ubuntu镜像…

(windows2012共享文件夹和防火墙设置

windows2012共享文件夹和防火墙设置 1.windows2012文件夹共享1.共享和高级共享的区别![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0d815cc6862a4c7a99be11442fb5d950.png#pic_center) 2.windows的防火墙设置1.防火墙设置8080端口让tomot可以在主机可以访问1.新建…

iptables 防火墙(二)

目录 1. SNAT 策略及应用 1.1 SNAT策略概述 1. 只开启路由转发,未设置地址转换的情况 2. 开启路由转发,并设置SNAT转换的情况 1.2 SNAT策略的应用 1. 2.1 共享固定IP上网 (1)打开网关的路由转发 (2)…

ArkUI自定义组件的使用

文章概叙 本文主要讲的是如何在ArkUi红创建一个自定义的组件,并且在新的页面中引用,其实依旧是自定义函数,只是既可以在外部使用,也可以作为组件引入. 介绍 前面的文章中,已经对tab页面的内容编辑的差不多了&#x…

C语言经典算法【每日一练】20

题目&#xff1a;有一个已经排好序的数组。现输入一个数&#xff0c;要求按原来的规律将它插入数组中。 1、先排序 2、插入 #include <stdio.h>// 主函数 void main() {int i,j,p,q,s,n,a[11]{127,3,6,28,54,68,87,105,162,18};//排序&#xff08;选择排序&#xff09…

算法训练day51|动态规划part12

309.最佳买卖股票时机含冷冻期&#xff08;参考&#xff1a;代码随想录 四种状态&#xff0c;来代表寒冷冻期的买卖股票状态 状态一&#xff1a;持有股票状态&#xff08;今天买入股票&#xff0c;或者是之前就买入了股票然后没有操作&#xff0c;一直持有&#xff09;不持有…

Syn_SegNet:用于常规 3T MRI 中超高场 7T MRI 合成和海马亚场分割的联合深度神经网络

Syn_SegNet: A Joint Deep Neural Network for Ultrahigh-Field 7T MRI Synthesis and Hippocampal Subfield Segmentation in Routine 3T MRI Syn_SegNet&#xff1a;用于常规 3T MRI 中超高场 7T MRI 合成和海马亚场分割的联合深度神经网络背景贡献实验为了确定哪个模态分割最…

VSCODE 修改Test模式下的的java jvm堆内存大小

在settings.json中添加如下语句 "java.test.config": {"vmArgs": ["-Xmx12G"]},

【Latex错误:】Package fontspec: The font “SIMLI“ cannot be found. LaTex [行 37,列1]

【Latex错误&#xff1a;】Package fontspec: The font "SIMLI" cannot be found. LaTex [行 37&#xff0c;列1] 解决方案 错误详情如下图所示&#xff1a; 最近使用latex写毕业论文&#xff0c;效率是快&#xff0c;但是出些一些错误就难得搞了&#xff0c;上面的…

信息网络协议基础_IP网络服务质量

文章目录 概述为什么要增加服务质量支持功能?如何表述服务质量?如何区分数据QoS网络服务等级协议综合服务原理区分服务原理PHB综合-区分服务概述 为什么要增加服务质量支持功能? 如何表述服务质量?

【并发】AtomicInteger很安全

AtomicInteger 简介与常规用法 AtomicInteger 是 Java 中 java.util.concurrent.atomic 包下的一个类。用于实现原子操作的整数。它是一个基于CAS&#xff08;Compare-And-Swap&#xff09;实现的原子整数类。它提供了一系列的原子操作&#xff0c;确保对整数的操作是原子性的&…

superset利用mysql物化视图解决不同数据授权需要写好几次中文别名的问题

背景 在使用superset时&#xff0c;给不同的人授权不同的数据&#xff0c;需要不同的数据源&#xff0c;可视化字段希望是中文&#xff0c;所以导致不同的人需要都需要去改表的字段&#xff0c;因此引入视图&#xff0c;将视图中字段名称设置为中文 原表数据 select * from …

Kubernetes 学习总结(43)—— Kubernetes 从提交 deployment 到 pod 运行的全过程

当用户向 Kubernetes 提交了一个创建 deployment 的请求后&#xff0c;Kubernetes 从接收请求直至创建对应的 pod 运行这整个过程中都发生了什么呢&#xff1f; kubernetes 架构简述 在搞清楚从 deployment 提交到 pod 运行整个过程之前&#xff0c;我们有先来看看 Kubernete…

智能硬件(8)之蜂鸣器模块

学好开源硬件&#xff0c;不仅仅需要会编程就可以了&#xff0c;电路基础是很重要的&#xff1b;软件和硬件都玩的溜&#xff0c;才是高手&#xff0c;那么小编为了方便大家的学习&#xff0c;特别画了一块智能传感器板子&#xff0c;来带领大家学习电路基础&#xff0c;玩转智…

C语言实例_time.h库函数功能及其用法详解

一、前言 时间在计算机编程中扮演着重要的角色&#xff0c;C语言的time.h头文件提供了一系列的函数和工具&#xff0c;用于处理时间和日期相关的操作。这些函数包括获取当前时间、日期格式化、时间间隔计算等功能&#xff0c;为开发人员提供了强大的时间处理能力。本文将对tim…

网站使用SSL证书的重要性

并非所有网站都可以安全访问。事实上&#xff0c;某些网站可能包含恶意软件&#xff08;恶意软件&#xff09;&#xff0c;可能会损害您的计算机或窃取您的个人联系信息或信用卡号。 网络钓鱼是另一种常见的基于 Web 的攻击类型&#xff0c;诈骗者试图诱骗您向他们提供您的个人…

记一次JSF异步调用引起的接口可用率降低 | 京东云技术团队

前言 本文记录了由于JSF异步调用超时引起的接口可用率降低问题的排查过程&#xff0c;主要介绍了排查思路和JSF异步调用的流程&#xff0c;希望可以帮助大家了解JSF的异步调用原理以及提供一些问题排查思路。本文分析的JSF源码是基于JSF 1,7.5-HOTFIX-T6版本。 起因 问题背景…

CSS日常总结--CSS伪类

前言 CSS伪类是一种允许选择文档中特定状态或位置的CSS选择器。它们用于选择不同状态下的元素&#xff0c;而无需改变HTML标记的内容。伪类以冒号&#xff08;:&#xff09;开头&#xff0c;紧随其后的是伪类的名称。它们与选择器结合使用&#xff0c;以定义在特定条件下应用的…

【C语言】数据结构——带头双链表实例探究

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;1. 双链表结构特征2. 实现双向循环链表2.1 定义结构体2.2 创造节点2.3 双向链表初始化2.4 双向链表打印2…