文章目录

  • 前言
  • 2.5 Shell编程
    • 2.5.1. 概述
    • **2.5.2. HelloWorld**
    • **2.5.3.** **变量**
    • **2.5.3.2.** **使用变量**
    • **重新定义变量**
    • **2.5.3.3.** **删除变量**
    • **2.5.3.4.** **常量**
    • **2.5.4.** **字符串**
    • **2.5.4.1.** **字符串的定义和使用**
    • **使用单引号**
    • **使用双引号**
    • **2.5.4.2.** **字符串常见功能**
    • **2.5.5.** **传递参数**
    • **2.5.6.****算术运算符**
    • **2.5.7.** **程序流程**
    • **2.5.7.1.2. case****条件分支**
    • **2.5.7.2.** **循环结构**
    • **2.5.7.2.2. while****循环**
    • **2.5.7.2.3.** **无限循环**
    • **2.5.7.2.4. break****和****continue**
    • **continue**
    • **2.5.8.** **函数**
    • **2.5.8.2.** **函数传参**
    • **2.5.8.3.** **函数返回值**
    • **2.5.8.4.** **特殊参数说明**
    • **2.5.9.** **数组**
    • **2.5.9.1.** **特点**
    • **2.5.9.2.** **读取数组**
    • **2.5.9.3.** **修改数组**
    • **2.5.9.4.** **遍历数组**
    • **2.5.10.** **引用其它文件变量**
  • 总结

前言


2.5 Shell编程

2.5.1. 概述

Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。
Shell 既是一种命令语言,又是一种程序设计语言。
Shell script 是一种为 shell 编写的脚本程序。Shell 编程一般指 shell脚本编程,不是指开发 shell 自身。
Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释
器就可以了。
Linux 的 Shell 解释器 种类众多,一个系统可以存在多个 shell解释器,可以通过 cat /etc/shells 命令查
看系统中安装的 shell解释器。
Bash 由于易用和免费,在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。
可以以下方式查看Shell解释器:

2.5.2. HelloWorld

(1)创建/export/exec01.sh

(2)赋予可执行权限

(3)执行脚本

执行方式一和二中 ,sh是bash的快捷方式

执行方式三可以执行,是因为在环境变量PATH中已经配置了/bin目录,所以可以直接到/bin目录下查找

相关命令

2.5.3. 变量

2.5.3.1. 变量规则

变量名称没有任何修饰符
变量名和等号之间,等号和初始化值之间不能有空格
变量名只能使用英文字母,数字和下划线,首个字符不能以数字开头
中间不能有空格,可以使用下划线(_)
不能使用标点符号
不能使用 bash 里的关键字(可用help命令查看保留关键字)
赋值方式可以直接赋值,也可以把某命令执行结果赋值给变量

以上语句会把"/export"下的文件名称一一列出

语句中使用的"`"是反单引号

2.5.3.2. 使用变量

使用**$**引用已定义变量

使用${变量名}的方式来引用已定义变量,通常情况下{}可省;但如果使用{}是为了定义变量边界,则{}不

可省

以上程序中{}不可省,其是为了指明引用skill变量,而不是skillScript

重新定义变量


重新定义变量时不要加符号,只有使用变量时才加符号,只有使用变量时才加符号,只有使用变量时才加符号

2.5.3.3. 删除变量

使用 unset 命令可以删除变量

2.5.3.4. 常量

变量一旦被赋值,就不可再改变其值

使用readonly修饰,可以变量改变为常量

2.5.4. 字符串

2.5.4.1. 字符串的定义和使用

字符串是shell编程中最常用数据类型,定义字符串可以使用单引号、双引号、也可以不使用引号

使用单引号

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

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

串拼接使用


使用双引号

双引号里可以引用变量

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

2.5.4.2. 字符串常见功能

获取字符串长度

截取字符串子串

从第2个字符开始截取,截取到字符串末尾

从第2个字符开始截取,截取2个字符

查找子串

查找字符串中is的位置

2.5.5. 传递参数

我们在执行shell脚本时,可以向shell脚本中传递参数,在shell脚本中使用这些传入的参数

使用方式:

./exec01.sh 参数01 参数02 …

脚本内获取参数的格式为:$n

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

使用特殊字符来处理参数接收:


其中∗和*和∗和@的区别:

∗会把接收到的参数"ab"作为一个参数使用,而*会把接收到的参数"a b"作为一个参数使用,而∗会把接收到的参数"ab"作为一个参数使用,而@会把接收到的参数"a" "b"作为两个参数接收


**2.5.6.**算术运算符

Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。

原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如expr。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

使用expr表达式时要注意:

操作数和运算符之间要有空格 ,例如 2 + 2 ,而不能写成2+2

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

常用算术运算符说明:

**注意:**条件表达式要放在方括号之间,并且操作数和运算符之间要有空格,例如: [a==a==a==b] 是错误的,

必须写成 [ $a == $b ]

2.5.7. 程序流程

2.5.7.1. 条件分支结构

2.5.7.1.1. if****条件分支

常用的判定条件运算符:

只支持数字,不支持字符串,除非字符串的值是数字


运行结果如下:

2.5.7.1.2. case****条件分支

用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令

执行流程说明:

取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一

模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果

无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

2.5.7.2. 循环结构

2.5.7.2.1. for****循环

使用循环遍历1-5

使用循环遍历1-5中的奇数

使用遍历访问"/export"目录下的内容

2.5.7.2.2. while****循环

输出1-10的和值

2.5.7.2.3. 无限循环

每隔1秒,输出当前系统时间

2.5.7.2.4. breakcontinue

break

直接提出所有循环

使用无限循环输出系统时间,每隔一秒输出一次,使用break控制只输出10次

continue

仅跳出当前次循环

遍历输出1-20,跳过3的倍数

2.5.8. 函数

2.5.8.1. 入门例子

2.5.8.2. 函数传参

调用函数时可以向其传递参数;在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个

参数,$2表示第二个参数…

注意:10不能获取第十个参数,获取第十个参数需要10 不能获取第十个参数,获取第十个参数需要10不能获取第十个参数,获取第十个参数需要{10}。当n>=10时,需要使用${n}来获取参数。

2.5.8.3. 函数返回值

2.5.8.4. 特殊参数说明

特殊参数处理说明:

2.5.9. 数组

2.5.9.1. 特点

bash中的数组只支持一维数组

初始化时不需要定义数组大小

数组元素的下标由0开始

用括号来表示,元素用"空格"符号分割开

2.5.9.2. 读取数组

使用下标读取数组中某一个元素

读取数组全部元素

读取数组长度

2.5.9.3. 修改数组

修改数组第一个元素值为2

2.5.9.4. 遍历数组

2.5.10. 引用其它文件变量

在某shell脚本中是可以使用其它脚本中变量,需要先引入其它脚本

引入其它脚本方式

. 其它脚本名称 或者 source 其它脚本名称

脚本exec11.sh:

脚本exec12.sh:



总结

Shell编程-JAVA大数据-Week5-DAY3-linux相关推荐

  1. shell编程之大数据面试题

    1.linux常用高级命令 1.1.top --实时查看内存 1)第一行 23:07:25 : 当前系统时间: user : 用户个数: load average : 三个数分别表示1分钟,五分钟,1 ...

  2. 阿里云校招面试官解读为什么Java大数据是最火爆人工智能编程语言

    在这里推荐一个学习资料群:java<学习>+交流 523401738可以听老师直播讲课 阿里云程成都峰会 未来10年将是大数据,人工智能爆发的时代,到时将会有大量的企业需要借助大数据,而J ...

  3. Python +大数据-Hadoop生态-Linux(二)-集群搭建和安装

    Python +大数据-Hadoop生态-Linux(二)-集群搭建和安装 今日课程学习目标 1.掌握Linux用户.权限管理 2.掌握Linux常用系统命令 3.掌握服务器集群环境搭建 4.了解sh ...

  4. java大数据开发做什么你知道吗?大数据的职业发展规划

    ​​​​​​ 你想过自己的未来规划吗? java大数据程序员只需要学到技术就行吗? 1.如何成为大数据工程师 Java开发是IT行业的经典岗位,行业当中存在普遍的需求,Web开发.Android开发. ...

  5. JAVA大数据需要学什么

    大数据时代,Java开发的需求量越来越大 大数据已经成为了企业竞争的核心力量.而Java是企业大数据技术的主要支撑语言,Hadoop本身就是用Java编写的.当你需要在运行MapReduce的服务器集 ...

  6. Java和Java大数据有什么区别?

    单单提起java或者大数据,很多人对此都一目了然,但对于Java大数据这样一个新鲜名词,多少有些疑惑.那java和java大数据学习的内容是一样的吗?两者有什么区别呢?今天就从java和java大数据 ...

  7. 为什么Java大数据是最火爆的编程语言?

    未来10年将是大数据,人工智能爆发的时代,到时将会有大量的企业需要借助大数据,而Java最大的优势就是它在大数据领域的地位,目前很多的大数据架构都是通过Java来完成的. 在这个Android.iOS ...

  8. 选择java大数据开发方向学习,应该怎么规划学习路线

    Java是目前使用广泛的编程语言之一,具有的众多特性,特别适合作为大数据应用的开发语言.Java语言功能强大和简单易用,不仅吸收了C++语言的各种优点还摒弃了C++里难以理解的多继承.指针等概念. J ...

  9. Java大数据学习路线图

    Java大数据学习路线图 准备篇 适用/适合人群:适合基础小白 在这里还是要推荐下我自己建的大数据学习群:199427210,群里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软 ...

最新文章

  1. python基础04
  2. node 使用 download-git-repo 下载 github 代码
  3. 使用FastCoder写缓存单例
  4. VS2022 C28251 WinMain批注不一致的解决方法
  5. linux 7autofs配置,基于CentOS7.x 使用Autofs_配置自动挂载NFS服务
  6. 【栈】【字符】匹配(jzoj 1612)
  7. IBM AIX 5.3 系统管理 -- 系统启动过程详解
  8. 血栓清道夫机器人_血栓“清道夫”找到了!木耳排第三,排在第一很多人都并不知道...
  9. python飞机大战跟随鼠标移动_用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动...
  10. 如何理解 if __name__ == “__main__“:
  11. tensorflow学习之常用函数总结:tensorflow.cast()函数
  12. 微机计算机原理及应用ppt,微型计算机原理及应用PPT课件
  13. 操作系统总结之 输入输出系统(下)
  14. JAVA|IO流的练习
  15. 机器学习的通俗讲解!
  16. 顺序表C语言实现详解
  17. 计算机始业课教案,始业课教案
  18. STM32---定时器的ETR功能
  19. [SugerTangYL] Verilog 语言入门(零基础视角)
  20. 水洼数dfs(java)

热门文章

  1. batch echo 输出空格(空行 空白行)
  2. 关于数据准备时,自动棌番的主键,这一字段数据的注意(IT总结之五)
  3. 【Oracle】SCOPE=MEMORY|SPFILE|BOTH
  4. 关于鸿蒙DevEco Studio学习
  5. 记一次Jenkins 打包异常 ERROR: Exception when publishing, exception message [Failure]
  6. “ORA-01747: user.table.column, table.column 或列说明无效” 的解决方案
  7. Trello如何访问用户的剪贴板?
  8. 为什么this()和super()必须是构造函数中的第一条语句?
  9. 什么是Android上的“上下文”?
  10. win11安装助手闪退怎么办 Windows11安装助手闪退的解决方法