linux写程序四则运算,Shell编程之变量及四则运算

Shell的学习目标

Shell的基本语法结构: 如:变量的定义、条件判断、循环语句(for、until、while)、分支语句、函数和数组等。

基本正则表达式的应用

文件处理:grep、sed、awk工具的使用

使用shell脚本完成复杂的任务:服务搭建、批量处理。

今日目标

掌握Shell变量的定义和获取

Shell简单的四则运算

一、编程语言概述

计算机只能识别机器语言(也就是二进制(0和1))。但是又不能直接使用0和1,必须借助人(工具)来进行翻译成机器语言。而人(工具)就是常说的编译器或者是解释器 。

编程语言的分类

653275b95ed1d8aca4b565aff5fe7d0f.png

编译型语言 程序在执行之前需要一个编译过程,把程序编译为机器语言文件,运行时不需要重新翻译,直接使用编译的结果即可。程序执行效率高,以来编译器,跨平台性差,如C、C++。

解释型语言 程序不需要编译,程序在运行时由解释器翻译成机器语言,每次执行一次都要翻译一次。效率比较低。如Python/Javascript/Perl/Ruby/Shell等这些都是解释型语言。

45b47e4eeb2c3a9f6a8adfcd79a1bfb5.png

总结:

编译型语言比解释型速度较快,但是不如解释型语言跨平台性好。

如果做底层开发或者是大型应用程序或者操作系统一般都用编译型语言。

如果是一些服务器脚本及一些辅助的接口,对速度要要求不高。

对于各个平台的兼容性问题的话一般则是解释型语言。

二、Shell概述

Shell介于用户和内核之间,负责命令的解释。

b5f581cbf25ffc4883d3f4fe5a9868d7.png

总结: shell是人机交互的媒介。

shell的种类:

[solerho@localhost ~]$ cat /etc/shells

/bin/sh # 是bash的一个快捷方式

/bin/bash # bash是大多数Linux默认的Shell,包含的功能几乎涵盖了shell的所有功能。

/usr/bin/sh

/usr/bin/bash

1、什么是Shell脚本?

需要执行的命令保存到文本中,按照顺序执行。解释型的语言,所以不需要编译。

可以使用公式来描述:

若干命令 + 脚本基本格式 + 脚本特定语法 + 思想 = Shell脚本

2、Shell脚本的用途

自动化软件部署

LAMP/LNMP/Tomcat

自动化管理

系统初始化脚本、批量更改主机密码、推送公钥等。

自动化分析处理

统计网站访问量

自动化备份

数据库备份、日志转储。

自动化监控脚本

3、Shell脚本的基本写法

3.1 脚本的第一行:字符#!指定解释器【必写】

#!/bin/bash 表示以下内容使用bash解释器解析。

注意点: 如果直接将解释器路径固定在脚本里,可能有些系统会存在找不到解释器的兼容性问题,所以,可以使用 #!/bin/env 解释器进行解析。

3.2 脚本的第二部分:注释(#)号说明,对脚本的基本信息进行描述。 例如:

#!/bin/env bash

# Name:Soler HO

# Desc:description

# path:存放路径

# 下面是脚本的具体内容

commands

…...

3.3 脚本的第三部分:脚本要实现的具体代码内容。

4、Shell脚本的执行方式

91c4db37310234976de7cd239b152949.png

4.1 切换到shell脚本所在的目录(此时叫做工作目录)执行shell脚本

4.2 以绝对路径的方式去执行bash shell脚本

4.3 直接使用bash 或sh 来执行bash shell脚本

4.4 在当前的shell环境中执行bash shell脚本

三、变量的定义

1、什么是变量?

可以变化的数据,是用来临时保存数据的。

2、变量的定义格式

变量名=变量值

变量名:用来临时保存数据。

变量值:临时可变化的数据。

例如:

A = hello shell

echo $A #调用变量,必须使用$符号

echo ${A}

$A和${A}的区别:

相同点:都是可以调用变量

不同点:${变量名}可以截取变量的某一部分,而$变量名 不可以。

3、变量的定义规则

变量名区分大小写

变量名不能有特殊符号

如果是有空格的字符串给变量赋值时,需要使用引号。

变量名不能以数字开头。

注意点:不能以数字开头不代表不能包含数字。

等号的两边不能有任何空格。

变量名尽量做到见其名知其意。

一般来说,变量名使用大小写均可。

4、交互式定义变量read

目的:让用户自己给变量赋值,比较灵活。

语法:read [选项] 变量名

常见的选项:

选项

释义

-p

定义提示用户的信息

-n

定义字符数(限制变量值的长度)

-s

不显示(不显示用户输入的内容)

-t

定义超时时间,默认单位为秒(限制用户输入变量值的时间)

例子:

52c95f0da74cc43b5ac429eb758c755f.png

变量值来自文件的例子:

7f1a676dd74f54253f3e954537638a34.png

5、定义有类型的变量(declare)

目的:给变量做一些限制,固定变量的类型。例如:整型,只读等。

用法:declare 选项 变量名=变量值

常用的选项:

选项

释义

例子

-i

将变量设置成整数

declare -I A=23

-r

定义只读变量

declare -r B=shell01

-a

定义普通数组;查看普通数组

-A

定义关联数组;查看关联数组

-x

将变量通过环境导出

declare -x AA=1234 等于 export AA=1234

四、变量的分类

1、本地变量:当前用户自定义的变量,当前进程中有效,其他的进程及当前进程的子进程无效。

2、环境变量:当前进程有效,且可以呗子进程调用。

env — —— 查看当前用户的环境变量

set ——— 查询当前用户的所有变量(临时变量与环境变量)

export 变量名=变量值 或者是 变量名=变量值;export 变量名

af45e8a428148831425594a39d832cc6.png

3、全局变量:所有的用户和程序都能调用,且继承、新建的用户也默认能调用。 相关配置文件的介绍

文件名

说明

备注

$HOME/.bashrc

当前用户的bash信息,用户登陆时读取

定义别名、umaks、函数等

$HOME/.bash_profile

当前用户的环境变量,用户登陆时读取

$HOME/.bash_logout

当前用户退出当前shell时最后读取

定义用户退出时执行的程序

$/etc/bashrc

全局的bash信息,所有用户都有效。

$/etc/profile

全局环境变量信息

系统和用户都生效。

注意点:以上的文件修改后,都需要重新source让其生效或者是退出重新登录。

用户登陆系统读取相关文件的顺序

* /etc/profile

* $HOME/.bash_profile

* $HOME/.bashrc

* /etc/.bashrc

* /etc/.bash_logout

4、系统变量 系统变量(内置bash中变量):shell已经固定好自身的名字和作用。

内置系统变量

含义

$?

上一条命令执行后返回的状态,状态值为0表示执行正常。非0表示执行异常或错误。

$0

当前执行的程序或脚本名

$#

脚本后面接的是参数的个数

$*

脚本后面所有的参数,参数当成一个整体输出,每一个变量参数之间用空格隔开。

$@

脚本后面所有的参数,参数是独立,也是全部输出。

$1-$9

脚本后面的位置参数,$1表示第一个位置参数。

${10}-${n}

位置参数的扩展,第10个位置变量起必须扩起来(两位数字起就扩起来。

$$

当前所在进程的进程号,如echo $$

$!

后台运行的最后一个进程号(当前终端)。

!$

调用最后一条命令历史中的参数

实践操作:

4fd4e64670360b03e23b749e3ac2f3ba.png

五、四则运算

算术运算:默认情况下,shell就只能支持简单的整数运算。

运算内容:加(+)、减(-)、乘(*)、除(/)、求模(余数)(%)。

1、四则运算符号

表达式

实例

$(())

echo $((1+1))

$[]

echo $[10-5]

expr

expr 10/5 注意点:乘法时,要使用转义符(\)即,expr 10*5

let

n=1;let n+=1 等价于 let n=n+1

实例练习:

fedb7c36d947f64b7d76dab13ccc16ba.png

2、i++和++i

表达式

对变量的影响

对表达式的影响

i++

先赋值,再运算

++i

先运算,再赋值

实例练习:

d16ec3f59c69b61af26395874b85d9c1.png

文章如有错误

请大家给予多多指教

非常感谢

95年金牛座的程序员 感谢你的关注

公众号:平头哥Geek

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

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

相关文章

博时基金基于 RocketMQ 的互联网开放平台 Matrix 架构实践

简介&#xff1a; 随着近两年业绩的抢眼&#xff0c;公募基金迎来了乘风破浪式的发展&#xff0c;截至 2021 年 1 月底&#xff0c;资产管理规模已破 20 万亿&#xff0c;创下了历史新高。 ​ <本文已参与 RocketMQ Summit 优秀案例征文活动&#xff0c;点此了解详情> 作…

首次 统一调度系统规模化落地,全面支撑阿里巴巴双 11 全业务

简介&#xff1a; 今年双 11 首次规模化亮相的统一调度&#xff0c;通过一套调度协议、一套系统架构&#xff0c;统一管理底层的计算、存储、网络资源&#xff0c;超大规模、高效率、自动化的资源弹性&#xff0c;实现了业界新的突破。在离线混部、离在线混部、新的快上快下技术…

日志服务Dashboard加速

简介&#xff1a; 阿里云日志服务致力于为用户提供统一的可观测性平台&#xff0c;同时支持日志、时序以及Trace数据的查询存储。用户可以基于收集到的各类数据构建统一的监控以及业务大盘&#xff0c;从而及时发现系统异常&#xff0c;感知业务趋势。但是随着收集到的数据量不…

明明还有空间,硬盘却写不进去了!

作者 | 阮一峰一、inode是什么&#xff1f;文件储存在硬盘上&#xff0c;硬盘的最小存储单位叫做"扇区"&#xff08;Sector&#xff09;。每个扇区储存512字节&#xff08;相当于0.5KB&#xff09;。操作系统读取硬盘的时候&#xff0c;不会一个个扇区地读取&#xf…

Dataphin核心功能(四):安全——基于数据权限分类分级和敏感数据保护,保障企业数据安全

简介&#xff1a; 《数据安全法》的发布&#xff0c;对企业的数据安全使用和管理提出了更高的要求。Dataphin提供基于数据分级分类和数据脱敏的敏感数据识别和保护能力&#xff0c;助力企业建立合规的数据安全体系&#xff0c;保障企业数据安全。本篇&#xff0c;我们就来聊聊D…

Quick BI产品核心功能大图(四):Quick引擎加速--十亿数据亚秒级分析

简介&#xff1a; 随着数字化进程的深入&#xff0c;数据应用的价值被越来越多的企业所重视。基于数据进行决策分析是应用价值体现的重要场景&#xff0c;不同行业和体量的公司广泛依赖BI产品制作报表、仪表板和数据门户&#xff0c;以此进行决策分析。 在利用BI产品进行数据分…

云厂商靠不靠谱?“国家级标准”鉴定结果来啦

近日&#xff0c;中国电子工业标准化技术协会信息技术服务分会&#xff08;ITSS分会&#xff09;正式公布最新一批通过信息技术服务标准符合性评估的企业名单。作为云计算领域首个权威分级评估体系&#xff0c;也是目前最健全的云服务能力评估体系&#xff0c;ITSS云服务能力符…

Spring Cloud Gateway一次请求调用源码解析

简介&#xff1a; 最近通过深入学习Spring Cloud Gateway发现这个框架的架构设计非常简单、有效&#xff0c;很多组件的设计都非常值得学习&#xff0c;本文就Spring Cloud Gateway做一个简单的介绍&#xff0c;以及针对一次请求Spring Cloud Gateway的处理流程做一个较为详细的…

函数计算GB镜像秒级启动:下一代软硬件架构协同优化

简介&#xff1a; 优化镜像加速冷启动大致分为两种做法&#xff1a;降低绝对延迟和降低冷启动概率。自容器镜像上线以来我们已经通过镜像加速技术&#xff0c;分阶段降低了绝对延迟。本文在此基础上&#xff0c;介绍借助函数计算下一代IaaS底座神龙裸金属和安全容器&#xff0c…

源码级别的广播与监听实现

作者 | 阿Q来源 | 阿Q说代码闲来无事&#xff0c;又翻了遍Spring的源码。不翻不知道&#xff0c;一翻吓一跳&#xff0c;之前翻过的源码已经吃进了肚子里&#xff0c;再见亦是陌生人。今天就带大家从源码的角度来分析一下广播与监听的底层实现原理。源码解析 为了实现广播与监听…

用代码玩剧本杀?第3届83行代码大赛剧情官方解析

简介&#xff1a; 由阿里云云效主办的2021年第3届83行代码挑战赛已经收官。超2万人围观&#xff0c;近4000人参赛&#xff0c;85个团队组团来战。大赛采用游戏闯关玩儿法&#xff0c;融合元宇宙科幻和剧本杀元素&#xff0c;让一众开发者玩得不亦乐乎。 说到剧本杀&#xff0c…

阿里大规模业务混部下的全链路资源隔离技术演进

简介&#xff1a; 本文作为混部实践系列开篇&#xff0c;本篇文章将介绍资源隔离技术在混部中的重要性、其落地挑战及我们的应对思路。 作者&#xff1a;钱君、南异 混部顾名思义&#xff0c;就是将不同类型的业务在同一台机器上混合部署起来&#xff0c;让它们共享机器上的 …

探索PCIe 3.0峰值性能,长江存储推新消费级固态硬盘致态TiPlus5000

2022年4月8日&#xff0c;长江存储推出新款消费级固态硬盘产品致态TiPlus5000。该产品采用基于晶栈 2.0&#xff08;Xtacking 2.0&#xff09;架构的长江存储第三代三维闪存芯片&#xff0c;支持PCIe Gen3x4接口、NVMe 1.3协议&#xff0c;顺序读取速度高达3500 MB/s&#xff0…

“敏捷版”全链路压测

简介&#xff1a; PTS 结合 10 多年来阿里的全链路压测的经验&#xff0c;让阿里云的用户可以如同享用满汉全席般的享用全套标准的全链路压测&#xff0c;也可以根据自己的需求&#xff0c;选择最适合自己的方式。 作者&#xff1a;子矜 客户的故事 全链路压测被誉为大促备战…

linux传输tcp命令,Linux tcpdump命令帮助和示例

Tcpdump是用于网络数据包分析的基本命令行实用工具。它显示网络上的TCP/IP和其他传输的网络数据包&#xff0c;tcpdump 适用于大多数的类Unix系统操作系统(如Linux,BSD等)。类Unix系统的 tcpdump 需要使用libpcap这个捕捉数据的库就像 Windows下的WinPcap。Tcpdump使用libpcap库…

离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进

简介&#xff1a; 阿里云智能研究员 林伟 &#xff1a;阿里巴巴从湖到仓的演进给我们带来了湖仓一体的思考&#xff0c;使得湖的灵活性、数据种类丰富与仓的可成长性和企业级管理得到有机融合&#xff0c;这是阿里巴巴最佳实践的宝贵资产&#xff0c;是大数据的新一代架构。 林…

Kubernetes 入门教程

简介&#xff1a;本文是一篇 kubernetes&#xff08;下文用 k8s 代替&#xff09;的入门文章&#xff0c;将会涉及 k8s 的架构、集群搭建、一个 Redis 的例子&#xff0c;以及如何使用 operator-sdk 开发 operator 的教程。在文章过程中&#xff0c;会穿插引出 Pod、Deployment…

linux格式化usb设备,如何在 usb linux下格式化磁盘

慕田峪7331174以格式化 /dev/sda1 分区为例&#xff1a;$ sudo umount /dev/sda1# 必须先卸载该分区# 格式化为 FAT 分区$ sudo mkfs.vfat -F 32 /dev/sda1# -F 参数必须大写&#xff0c;参数有 12&#xff0c;16 和 32&#xff0c;分别对应 FAT12&#xff0c;FAT16&#xff0c…

通过浪潮AIStation实现细粒度高性能的GPU资源共享

作者 | 张荣国 供稿 | 浪潮 GPU&#xff08;Graphics Processing Unit&#xff09;&#xff0c;即图形处理器&#xff0c;是一种由大量核心组成的大规模并行计算架构&#xff0c;专为同时处理多重任务而设计。GPU在大规模并行运算上具有巨大优势&#xff0c;为大数据、人工智能…

阿里云发布云原生加速器,携手生态企业拥抱数字时代

简介&#xff1a; 继去年推出云原生合作伙伴计划之后&#xff0c;阿里云正式发布云原生加速器&#xff0c;携手生态企业拥抱数字时代。 今天&#xff0c;千行百业都在拥抱云计算、拥抱云原生&#xff0c;进行数字化创新升级。作为国内最早实践云原生的企业&#xff0c;阿里巴巴…