shell脚本编程(概念、编程和语句)

news2024/11/25 0:57:26

一、shell脚本概述 

1、shell脚本概念 

        Shell 脚本是利用 shell 的功能所写的一个程序。这个程序是使用纯文本文件,将一些 shell 的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能。

 

2、Shell 脚本编写步骤 

 

第一个 Shell 脚本文件:

  • 执行方式
  • bash test.sh
  • source test.sh
  • ./test.sh 

  二、shell脚本变量 

1、变量介绍

  • 变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。
  • 变量可以通过变量名访问。在指令式语言中,变量通常是可变的

2、 变量的作用

用来存放系统和用户需要使用的特定参数(值):

  • 变量名:使用固定的名称,由系统预设或用户定义
  • 变量值:能够根据用户设置、系统环境的变化而变化

3、变量的命名要求 

4、变量的分类

5、用户自定义变量

在 shell 编程中通常使用全大写变量,方便识别

  • $ COUNT=1

变量的调用:在变量前加 $

  • $ echo $COUNT

Linux Shell/bash 从右向左赋值

  • $Y=y
  • $ X=$Y
  • $ echo $X
  • y

使用 unset 命令删除变量的赋值

  • $ Z=hello
  • $ echo $Z
  • hello
  • $ unset Z
  • $ echo $Z

6、 用户自定义变量

        1)用户自定义变量 - 取值
  • 双引号 : 允许通过 $ 符号引用其他变量值
  • 弱引用,其中的变量引用会被替换为变量值
  • 单引号 : 禁止引用其他变量值, $ 视为普通字符
  • 强引用,其中的变量引用不会被替换为变量值,而保持源字符串
  • 反撇号 : 命令替换,提取命令执行后的输出结果, `` 和 $(...) 作用相同
         2)用户自定义变量 - 数组
  • echo $a :默认显示数组 a 的第一个元素
  • echo ${a[0]} :显示数组中第一个元素,以此类推
  • echo ${a[-1]} : 显示数组中最后一个元素
  • echo ${a[*]} 和 echo ${a[@]} :显示数组中所有元素
  • echo ${#a[@]} :显示数组中元素的个数
  • echo ${a[@]: 起始元素 id: 元素个数 ]} :显示数组中以起始元素为首的指定个数的元素(注意:这里起始元素 id 不能为负值
  • unset a[n] 删除数组中的第 n 个元素
  • unset a 删除 a 这个数组 

 7、只读变量

  • 变量值不允许修改(重新赋值)的情况
  • 无法使用 unset 删除
  • 最快方法重启
  • readonly

8、位置变量和预定义变量

  • $0 与键入的命令行一样,包含脚本文件名
  • $1,$2,......$9 ${10} 分别包含第一个到第十个命令行参数
  • $# 包含命令行参数的个数
  • $@ 包含所有命令行参数:“ $1,$2,......$9”
  • $* 包含所有命令行参数,是一个整体:“ $1,$2,......$9”
  • $? 包含前一个命令的退出状态
  • $$ 包含正在执行进程的 ID 号

9、环境变量

常用环境变量

  • $USER 表示用户名称
  • $HOME 表示用户的宿主目录
  • $LANG 表示语言和字符集
  • $PWD 表示当前所在工作目录
  • $PATH 表示可执行用户程序的默认路径
  • export 可以将变量指定为全局变量 

三、shell语句 

1、shell程序 

Shell 程序由零或多条 shell 语句构成。 shell 语句包括三类 :

  • 说明性语句
  • 功能性语句
  • 结构性语句

 2、说明性语句(注释行)

以 # 号开始到该行结束,不被解释执行

        注释行可以出现在程序中的任何位置 , 既可以单独占用一行 , 也可以接在执行语句的后面 . 以 # 号开始到所在行的行尾部分,都不被解释执行 .

例如 : 

#! /bin/sh
#
# 本程序说明
#
command_1
command_2 # command_2 的语句说明
......
# 下面程序段的说明
command_m
......
command_n # command_n 语句的说明
......

3、功能性语句(命令)

1)命令 -read 

read 从标准输入读入一行 , 并赋值给后面的变量 , 其语法为 :

read var

把读入的数据全部赋给 var

read var1 var2 var3
  • 把读入行中的第一个单词 (word) 赋给 var1, 第二个单词赋给 var2 , ......把其余所有的词赋给最后一个变量 .
  • 如果执行 read 语句时标准输入无数据 , 则程序在此停留等侯 , 直到数据的到来或被终止运行。
2)算术运算命令 -expr

        算术运算命令 expr 主要用于进行简单的整数运算,包括加 (+) 、减( - )、乘( \*) 、整除

( / )和求模( % )等操作。例如 : 

$ expr 12 + 5 \* 3
27
$ expr 3 - 8 / 2
-1
$ num=9
$ sum=`expr $num \* 6 `
$ echo $sum
54
3)命令 -test
  • test 语句可测试三种对象 :
  • 字符串 整数 文件属性
  • 每种测试对象都有若干测试操作符 
4)字符串测试
  • s1 = s2 测试两个字符串的内容是否完全一样
  • s1 != s2 测试两个字符串的内容是否有差异
  • -z s1 测试 s1 字符串的长度是否为 0
  • -n s1 测试 s1 字符串的长度是否不为 0
5)整数测试
  • a -eq b 测试 a 与 b 是否相等
  • a -ne b 测试 a 与 b 是否不相等
  • a -gt b 测试 a 是否大于 b
  • a -ge b 测试 a 是否大于等于 b
  • a -lt b 测试 a 是否小于 b
  • a -le b 测试 a 是否小于等于 b 
6)文件测试
  • -e name 测试一个文件是否存在
  • -d name 测试 name 是否为一个目录
  • -f name 测试 name 是否为普通文件
  • -L name 测试 name 是否为符号链接
  • -r name 测试 name 文件是否存在且为可读
  • -w name 测试 name 文件是否存在且为可写
  • -x name 测试 name 文件是否存在且为可执行
  • -s name 测试 name 文件是否存在且其长度不为 0
  • f1 -nt f2 测试文件 f1 是否比文件 f2 更新
  • f1 -ot f2 测试文件 f1 是否比文件 f2 更旧 

4、结构性语句 

        结构性语句主要根据程序的运行状态、输入数据、变量的取值、控制信号以及运行时间等因素来控制程序的运行流程。

 主要包括:

  • 条件测试语句(两路分支)
  • 多路分支语句
  • 循环语句
  • 循环控制语句等 

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

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

相关文章

openlayers 点击多边形弹框,高亮多边形,自定义属性传递,鼠标悬浮多边形上动态修改鼠标样式

本篇介绍一下使用openlayers点击多边形弹框,高亮多边形,自定义属性传递,鼠标悬浮多边形上动态修改鼠标样式 1 需求 加载天地图,polygon传递自定义属性标悬浮在polygon上,根据自定义属性,动态修改鼠标样式为pointer点…

【机器学习300问】124、什么是LSTM?LSTM的基本结构是怎样的?

长短期记忆网络(LSTM)是一种解决隐变量模型长期信息保存和短期输入缺失问题的方法,有趣的是,长短期记忆网络的设计比门控循环单元稍微复杂一些, 却比门控循环单元早诞生了近20年。 一、什么是LSTM? LSMT全…

迷你手持小风扇十大名牌排名有哪些?公认迷你小风扇排行榜揭开!

随着夏季的到来,炎热的天气让人们迫切需要一款便携、高效的降温工具。迷你手持小风扇因其小巧便携、操作简单而备受欢迎,成为人们日常生活中不可或缺的降温神器。然而,市场上迷你手持小风扇品牌繁多,如何挑选一款既实用又耐用的小…

SpringBoot + thymeleaf 修改文件,刷新页面不能实时展示修改后的内容问题解决

修改页面后文件后,刷新页面,内容不变,是因为项目没有编译,没有将新的页面文件编译,以下方法可以完美解决次问题 具体内容请查看:http://www.haozgx.top/blog/article/2

GD32调试篇:JLink驱动下载安装

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 向上代码兼容GD32F450ZGT6中使用 后续项目主要在下面该专栏中发布: https://blog.csdn.net/qq_62316532/category_12608431.html?spm1001.2014.3001.5482 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转…

学会这几点,轻松制作引人入胜的电子期刊

随着数字化时代的到来,电子期刊已经成为了信息传播的重要载体。它以方便快捷、形式多样、互动性强等特点,受到了广泛的欢迎。那么,如何制作一份引人入胜的电子期刊呢?下面就来为大家分享几点制作电子期刊的小技巧。 1.选择合适的制…

【机器学习】第2章 线性回归及最大熵模型

一、概念 1.回归就是用一条曲线对数据点进行拟合,该曲线称为最佳拟合曲线,这个拟合过程称为回归。 2.一个自变量 叫 一元线性回归,大于一个自变量 叫 多元线性回归。 (1)多元回归:两个x,一个…

Vue3鼠标悬浮个人头像时出现修改头像,点击出现弹框,上传头像使用cropperjs可裁剪预览

实现效果&#xff1a; 鼠标悬浮到头像上&#xff0c;下方出现修改头像 点击修改头像出现弹框&#xff0c;弹框中可上传头像&#xff0c;并支持头像的裁剪及预览 实现方式&#xff1a; 1.tempalte中 <div class"img-box"><img v-if"avatarImgUrl&qu…

开始报名啦!智能可观测运维技术 MeetUp 议题硬核来袭

「龙蜥社区“走进系列”MeetUp」是由龙蜥社区与生态合作伙伴联合主办的系列月度活动&#xff0c;每期走进一家企业&#xff0c;聚焦龙蜥社区和合作伙伴的技术、产品和创新动态&#xff0c;展示硬核技术&#xff0c;共建繁荣生态。 龙蜥社区“走进系列”第 11 期走进中兴通讯-智…

【Axure高保真原型】动态统计中继器表格项目数

今天和大家分享动态统计中继器表格项目数的原型模板&#xff0c;具体包括以下功能&#xff1a; 表格下方可以自动根据表格内容统计表格的总项目数、启用和禁用数、选中和未选中数 我们可以点击开发切换启用和禁用 点击多选按钮&#xff0c;选中或取消选中对应行内容 选中后可…

关于Markdown的使用与创建

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

《收获,不止oracle》读书笔记一:oracle体系结构

从图中可以看出,oracle数据库是由实例和一组数据库文件组成。实例是由oracle开辟的内存区和一组后台进程组成的。

【多线程】线程状态

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 枚举线程所有状态2. 线程转移2.1 示意图2.2 观察 NEW 、 RUNNABLE 、 TERMINATED 状态的转换2.3 观察 WAI…

fastsam-pytorch基于YOLACT方法的实例分割分支的目标检测器模型

FastSAM 论文 Fast Segment Anything 模型结构 以yolov8-seg的instance segmentation为基础&#xff0c;检测时集成instance segmentation分支,主要分为两步全实例分割(all instance Segmentation)和基于prompt的mask输出(Prompt-guided Selection)&#xff0c;仅使用了2%的…

采用了宽电压设计的测径仪为什么仍旧需要到现场勘察电力环境

关键字: 测径仪宽电压设计,测径仪电压范围,电压影响测径仪,测径仪车间电压 设备宽电压设计是指该设备能够在一定范围的电压波动内正常工作&#xff0c;而不会因为电压的轻微变化而导致性能下降或损坏。宽电压设计通常涉及到电源电路的优化和设计&#xff0c;以确保设备在电压波…

POSIX信号量以及读写者模型/环形队列

POSIX信号量 POSIX信号量和SystemV信号量作用相同&#xff0c;都是用于同步操作&#xff0c;达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步,他的本质是一个计数器,对共享资源进行等待或释放 POSIX信号量的重要概念 1.计数器:信号量维护一个计数器&#xff0c;它…

AI大佬都在说下一个爆点是智能体,建议开发者抢占先机!

现在大模型行至一年&#xff0c;风口与炒作如影随形&#xff0c;相信很多人身处其中但仍然感到很迷失&#xff0c;这个行业到底发展到什么程度了&#xff0c;作为普通开发者还有什么可以抓住的机会&#xff1f;从AI大佬的观点中&#xff0c;我们能获得一些行业变化的新风向。 …

corona渲染器与vray比哪个好?支持云渲染平台吗

​在视觉渲染技术领域&#xff0c;V-Ray和Corona都以其卓越的性能和广泛应用赢得了高度评价。这两款渲染器各有其独特的优势&#xff0c;使得在它们之间做出选择并非易事。不同的应用场景和用户需求可能会让它们各自展现出不同的优势。 一、corona渲染器跟vray怎么样 在比较V-…

Paragon NTFS For Mac 15软件下载_Paragon NTFS For Mac 15官网最新版下载

Paragon NTFS For Mac 15是一款强大的Mac读写工具。paragon ​​ntfs for mac​​​中文版为您轻松解决Mac不能识别 Windows NTFS文件难题&#xff0c;简单自如读写NTFS外置存储文件。在Mac OS X下全读/写访问NTFS的任何分区&#xff0c;paragon ntfs for mac中文版实现在Windo…

java 面试题--基础

文章目录 基础java SE 、 EE 、 ME 的区别jdk 和 jre 区别&#xff1f;java 的日志级别基本数据类型 特性关键字finalabstractsuperswitchfortry catch 接口和抽象类的区别接口抽象类适用场景 类的加载循序静态代码块 传参问题访问修饰符运算符 反射java 里的应用为什么反射的性…