当前位置: 首页 > news >正文

shell编程学习

1.什么是shell?

Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。

#!/bin/bash  解释器

2.shell种类

2.1shells文件下面各文件含义

常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。
[root@localhost ~]# cat /etc/shells

/bin/sh   #是bash命令的软链接  (已经被/bin/bash所替换)
/bin/bash   基准于GNU的框架下发展出的Shell。
/usr/bin/sh   已经被bash所替换。
/usr/bin/bash   #centos和redhat系统默认使用bash shell
/bin/tcsh   #csh的增强版,与csh完全兼容 整合了csh,提供更多的功能。
/bin/csh   #已经被/bin/bash 所替换  (整合C shell,提供更多的功能)

1)为什么我们的系统上合法的shell要写入/etc/shells这个文件?
这是因为系统某些服务在运行过程中,会去检查用户能够使用的shells,而这些shell的查询就是借由/etc/shells这个文件。

2)用户什么时候可以取得shell来工作?还有我这个默认会取得哪一个shell?
当我登录的时候,系统就会给我shell让我来工作,而这个登录取得的shell就记录在/etc/passwd这个文件内。

不同的shell具备不同的功能,shell还决定了Linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途
目前大多数linux系统默认使用的是bash shell,默认登陆shell是/bin/bash,可以查看/etc/passwd文件里注明
这个shell是针对用户而言的,可以查看/etc/passwd里面的最后的字段使用的是哪个shell,如果想要修改可以用chmod -s或者chsh -s来重新指定

3)shell脚本能干什么
自动化完成软件的安装部署,如安装部署LAMP架构服务
自动化完成系统的管理,如批量添加用户
自动化完成备份,如数据库定时备份
自动化的分析处理,如网站访问量

4)shell脚本使用场景
在需要完成大量复杂、重复性的工作时,不需要在命令行重复执行命令,直接运行shell脚本即可,大大的节省了时间提高了效率

5)如何学习shell脚本
熟悉掌握各种linux命令
掌握脚本的标准格式
掌握脚本的基本语法

2.2 执行 Shell 脚本

使用vi编辑器,创建shell程序文件。通常使用.sh作为shell程序后缀名。 shell程序的基本格式:

1、指定解释器信息。 默认: /bin/bash

2、书写shell程序代码

3、保存shell程序代码

4、执行shell程序 提前:给shell程序授予可执行权限

第一种: ./xxx.sh 在当前目录中执行shell程序

第二种: /xx/xxx.sh 书写全路径的shell程序

第三种: sh /xx/xxx.sh 把shell程序作用/bin/sh解释器的参数,通过运 行解释器来执行shell

程序的基本组成

1. 变量

2. 数据类型

3. 运算符号

4. 流程控制语句(默认:程序是按照从上向下依次执行)

5. 数组

6. 函数(另一个名字:方法)

3. Shell 程序:变量

3.1 语法格式

变量的语法: 变量名=值

注意: 等号两边不能有空格 ,同时变量名的命名须遵循如下规则:

①首个字符必须为字母( a-z, A-Z)

②中间不能有空格,可以使用下划线( _)

③不能使用标点符

④不能使用 bash 里的关键字(可用 help 命令查看保留关键字)

3.2 变量使用

使用一个定义过的变量,只要在变量名前面加 $ 即可

变量的定义: 变量名=初始值 等号两边不能有空格

变量的使用: $变量名 或 ${变量名}

修改变量中的值: 变量名=新的值 针对普通变量

只读变量: readonly 变量名=初始值 只读变量在初始化后不能修改初始值,只读变量不能被删除

删除变量(只能删除普通变量): unset 变量

4.字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

4.1单引号

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

4.2 双引号

双引号里可以有变量;

双引号里可以出现转义字。

4.3 获取字符串长度
4.4 提取子字符串

注意:当字符串中有空格时,空格也算一个字符存在(字符串是从0开始计算)

4.5 查找子字符串

格式 :   `expr index 字符串 子字符串`

注意: 以上脚本中 ` 是反引号(Esc下面的),而不是单引号 '

5. Shell 程序:参数传递

5.1 参数传递方式 传递参数的方式

传递参数的方式    ./shell程序 [空格] 参数1 [空格] 参数2

hell程序脚本内获取参数的格式为:

$n n 代表一个数字, 1 为执行脚本的第一个参数, 2 为执行脚本的第二个参 数,以此类推……

$0 表示当前脚本名称

5.2 特殊字符 shell程序中的特殊字符

6. Shell 程序:运算符

6.1 运算符的基本使用

Shell和其他编程语言一样,支持包括:算术、关系、逻辑、字符串等运算符

原生 /bin/bash 不支持简单的数学运算,但是可以通过其他命令来实现, 例如:expr 。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。\代表转义字符

注意:①运算数和运算符之间要有空格。

                 例如: 2+2 是不能运算的,必须写成 2 + 2

           ②完整的表达式要被`符号包含,注意不是单引号,在 Esc 键下边

此外,还可以通过(()) 、 $[] 进行算术运算

当仅只是进行+1运算时,可以直接使用:((…++))

拓展:read的简单使用

6.2 关系运算符

注意:关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

6.3 逻辑运算符

-a 代表与,符号为 &&;-o代表或,符号为 ||

总结

shell是Linux系统中的命令解释器,可以帮助处理批量重复工作,大幅提升工作效率,替企业节省成本。其能完成的任务主要包括以下几个方面:

①自动化安装部署,如搭建论坛

②批量添加用户

③数据库备份

④网络负载

⑤访问网站

http://www.dtcms.com/a/355905.html

相关文章:

  • 基于深度学习的档案级图像修复:Coderformer AI技术解析与应用实践
  • 一、晶振与布局布线处理
  • Python Imaging Library (PIL) 全面指南:Python Imaging Library (PIL)基础图像处理入门
  • 呼叫中心录音加密与数据隔离技术方案全解析
  • Wagtail 扩展 HomePage 模型(一个简单的 例子)
  • 人工智能-python-深度学习-过拟合与欠拟合:概念、判断与解决方法
  • 鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(三)
  • 详解多智能体架构:以 Open Deep Research 项目为例
  • Android中设置RecyclerView滑动到指定条目位置
  • container向harbor推送镜像报错 x509: certificate signed by unknown authority
  • redis添加超时设置
  • SONiC 之 Testbed(2)Ansible
  • Ansible 角色与 Galaxy 生态:角色复用、集合安装与系统角色配置详解
  • 半导体全自动化无人工厂应用
  • Zigbee与LoRaWAN物联网协议深度对比与技术选型指南
  • 激活函数学习
  • FIO的使用教程
  • 数据结构---链表操作技巧
  • 关于PCB面试问题
  • 01.<<基础入门:了解网络的基本概念>>
  • 大模型微调示例三之Llama-Factory_Lora
  • 机器学习和高性能计算中常用的几种浮点数精度
  • 拼团商城源码分享拼团余额提现网站定制开发源码二开
  • 二叉树高度-递归方式
  • 大模型应用开发与大模型开发有什么区别?
  • c语言动态数组扩容
  • [数据结构] 复杂度和包装类和泛型
  • 虚函数指针和虚函数表的创建时机和存放位置
  • AI记忆革命:从七秒遗忘到终身学习
  • 线程池的执行原理