linux脚本算术函数,Linux基础之bash脚本编程初级-变量与算术运算

什么是变量?

变量最初来源于数学,指的是非固定的值可变化的数通常用拉丁字母表示。在计算机中变量它依旧指的是可变化的数,只不过表现形式有些变化。它指的是变量名+所指向的内存空间。

以下实验环境均在CentOS7.2进行

变量的特点

变量分强类型变量,与弱类型变量

强类型变量:变量需事先声明且需提前定义其变量存储格式

弱类型变量:不需事先声明,不需定义变量存储格式。

bash把所有变量统统视作字符型;bash中的变量无需事先声明,相当于,把声明和赋值过程同时实现。

变量名的命名规范:

变量名只能包含数字,字母和下划线,而且不能以数字开头。

其命名要求见名知义,命名机制遵循某种法则(驼峰法则);不能使用程序的保留字:if,else,then,while,for...

bash的变量类型及其使用格式

本地变量,环境变量,局部变量,位置参数变量,特殊变量

变量引用格式:$VAR、${VAR}

………………………………………………………………………………………………………………………

本地变量:作用域仅为当前shell进程

变量赋值:name=‘value’

value有如下引用类型

1、直接字符串引用,格式:name="CHARS"[root@centos7 ~]# name1=abc

[root@centos7 ~]# echo $name1

abc

2、变量引用,格式:name=“$VAR”[root@centos7 ~]# name2=$SHELL

[root@centos7 ~]# echo $name2

/bin/bash

3、命令引用,格式:name=`COMMAND` | name=$(COMMAND)[root@centos7 ~]# name3=`date`

[root@centos7 ~]# echo $name3

2016年 08月 14日 星期日 11:16:55 CST

[root@centos7 ~]# name3=$(date)

[root@centos7 ~]# echo $name3

2016年 08月 14日 星期日 11:17:11 CST

“”:弱引用,其中的变量引用会被替换为变量值;[root@centos7 ~]# name4="$name1"

[root@centos7 ~]# echo $name4

abc

‘’:强引用,其中的变量引用不会被替换为变量值,而保持原字符串;[root@centos7 ~]# name5='$name1'

[root@centos7 ~]# echo $name5

$name1

命令set用于显示已定义的所有变量

撤销已定义的变量,格式:unset 变量名[root@centos7 ~]# echo $name5

$name1

[root@centos7 ~]# unset name5

[root@centos7 ~]# echo $name5

[root@centos7 ~]#

注:在刚接触bash变量时特别容易搞错的就是变量的使用格式,有时候该命令引用却忘记加``或$(),还有就是强引用与弱引用的使用时机。

下面以例子说明本地变量的作用范围,使用命令bash进入子shell[root@centos7 ~]# bash

[root@centos7 ~]# echo $name1

[root@centos7 ~]# exit

exit

[root@centos7 ~]# echo $name1

abc

由实验可知,作用域仅为当前shell进程。当然上面实验做的不够完善,因为并没有演示在符父shell中其变量是否有效,大家可以在下面补充实验去验证。

………………………………………………………………………………………………………………………

环境变量:作用域为当前shell进程及子进程

变量赋值:

有四种赋值格式:

1、export name=value

2、name=value

export name

3、declare -x name=value

4、name=value

declare -x name

注:bash内嵌了许多环境变量(通常全为大写字符),用于定义bash的工作环境

查看/显示环境变量 命令

export[root@centos7 ~]# export | head -5

declare -x HISTCONTROL="ignoredups"

declare -x HISTSIZE="1000"

declare -x HOME="/root"

declare -x HOSTNAME="centos7"

declare -x LANG="zh_CN.UTF-8"

declare -x[root@centos7 ~]# export | head -5

declare -x HISTCONTROL="ignoredups"

declare -x HISTSIZE="1000"

declare -x HOME="/root"

declare -x HOSTNAME="centos7"

declare -x LANG="zh_CN.UTF-8"

printenv[root@centos7 ~]# printenv | head -5

XDG_SESSION_ID=8

HOSTNAME=centos7

SELINUX_ROLE_REQUESTED=

TERM=linux

SHELL=/bin/bash

env[root@centos7 ~]# printenv | head -5

XDG_SESSION_ID=8

HOSTNAME=centos7

SELINUX_ROLE_REQUESTED=

TERM=linux

SHELL=/bin/bash

上面四个命令虽然显示顺序略有不同但是所包含的内容都是一样的[root@centos7 ~]# env | wc -l

24

[root@centos7 ~]# printenv | wc -l

24

[root@centos7 ~]# export | wc -l

24

[root@centos7 ~]# declare -x | wc -l

24

撤销环境变量

格式:unset VAR

下面通过例子验证环境变量的作用范围[root@centos7 ~]# export name6=$name2

[root@centos7 ~]# echo $name6

/bin/bash

[root@centos7 ~]# bash

[root@centos7 ~]# echo $name6

/bin/bash

………………………………………………………………………………………………………………………

局部变量:作用域仅为某代码片段(通常用在函数)

因为函数还没学到,这里不举例子

………………………………………………………………………………………………………………………

位置变量:当执行脚本的shell进程传递的参数

$1,$2,...$(10)...:对应调用第1,第2...第10个参数

………………………………………………………………………………………………………………………

特殊变量:shell内置的特殊功用的变量

$#:传递给脚本参数的个数

$*:传递给脚本的所有参数;各参数读成多个独立字符串

$@:传递给脚本的所有参数;各参数读成一个完整的字符串形式

$?:程序执行状态返回值,0表示正确,1-255表示失败

$0:表示命令本身

下面以一个简单的脚本来给出位置变量与特殊变量的应用[root@centos7 test]# cat var1.sh

#!/bin/bash

#

echo "$1"

echo "$2"

echo "$#"

echo "$@"

echo "$*"

b30c8b5fbc8678602ac11dd75db8d4bf.gif

上面特殊变量及位置变量均需要结合脚本才能使用。$@,$*二者虽然有区别不过在初学时可以不必在意,当学到一定阶段接触了一定的脚本后自然也就会区分二者的不同了。

算术运算

在未学习bash中的算术运算之前如果要计算从1+...+10需要使用管道将其送入bc计算器来解决,

echo {1..10} | tr ' ' '+'| bc很麻烦。而使用bash中的算术运算则可以简化代码。

bash中的算术运算格式:有很多种,本文只介绍常用的4种

1)let VAR=算术运算表达式[root@centos7 test]# let sum1=1+10

[root@centos7 test]# echo $sum1

11

2)VAR=$[算术表达式][root@centos7 test]# sum2=$[2+2]

[root@centos7 test]# echo $sum2

4

3)VAR=$((算术表达式))[root@centos7 test]# sum3=$((5+5))

[root@centos7 test]# echo $sum3

10

4)VAR=$(expr $ARG $OP $ARG2)[root@centos6 ~]# sum4=$(expr 2+8)

[root@centos6 ~]# echo $sum4

2+8

[root@centos6 ~]# sum4=$(expr 2 + 8 )

[root@centos6 ~]# echo $sum4

10

这种是调用expr命令计算后面运算表达式,它要求数值与运算符之间有空格,没有空格则不进行计算,保持运算表达式原本模样赋值给变量。

注:它与上述三种不同之处还有如果有乘法运算,乘法符号*在第四种里面需要加\进行转义。

以下为四种算术运算在乘法中的表现[root@centos6 ~]# sum4=$(expr 2 * 8 )

expr: 语法错误

[root@centos6 ~]# sum4=$(expr 2 \* 8 )

[root@centos6 ~]# echo $sum4

16

[root@centos6 ~]# let sum1=6*6

[root@centos6 ~]# echo $sum1

36

[root@centos6 ~]# sum2=$[2*3]

[root@centos6 ~]# echo $sum2

6

[root@centos6 ~]# sum3=$((3*4))

[root@centos6 ~]# echo $sum3

12

第四种需要转义,其他三种不需要。

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

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

相关文章

存储管理实验linux,07-存储管理器实验

S3C2440的存储控制器提供了访问外设所需要的信号,它有如下特性:支持大/小端字节(通过软件选择);每个BANK的地址空间为128MB,总共1GB(8个BANK);可编程控制的总线宽度(8/16/32bit),BANK0只有两种位…

linux bash and,linux bash shell中for的用法and示例

关于linux bash shell中的for语句在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用法。文中任何错误希望大佬们一一指出,不胜感激。bash shell中提供了…

mac利用vscode运行c语言程序,Mac下使用VScode编译配置C/C++程序详细图文教程

在mac上有时候需要编写一些c 或者 c的代码,如果使用 xcode,有时候就显得很笨重,而且运行起来很不方便。而微软提供了一个跨平台的编辑器visual studio code ,这个编辑器很轻量级,而且插件超多,你几乎可以在这个编辑器里…

五邑大学c语言期末考试题,五邑大学 c语言试卷.doc

五邑大学 c语言试卷.doc下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档,不会出现我们的网址水印。3、该文档所得收入(下载内容预览)归上传者、原创作者&#x…

网页版bpc电波对时_科普向:无需联网却能自动对时的钟表

有一种神秘的钟表,它能够自动对时,却不需要联网,它十分准时,和传说中的的原子钟的误差也仅有几毫秒,它十分小众,却也随处可见,它就是电波表。今天猫头我就跟大家说说这个电波表。首先什么是电波…

动感灯箱制作流程培训_2000多年的灯箱发展史,你知道多少?

灯箱作为日常广告标识业务的重要板块,相信每个标识人都已经非常熟悉了,国内标识人也经常去学习相关新工艺新案例,但其实很多人不知道世界上最早的灯箱可能是中国人制作的哦~接下来就带大家一起揭开灯箱的前世今生,并详细盘点一下如…

c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc

c语言学习知识编程经典编辑题汇总整编.doc - C语言编程基础习题汇总1.设计一个由键盘输入三个整数,求这三个数的平均数的程序。2.编写一个程序,用于水果店售货员结账。已知苹果每斤2.50元,鸭梨每斤1.80元,香蕉每斤2元,…

cp 过程中目录突然挂了_怎么解决管材激光切割机切管过程中出现的过烧及挂渣...

近年来,随着激光切割机的发展,不仅被用于切割平面板材,而且被应用于切割管材,我们称之为“管材激光切割机”。那么管材激光切割机用于切割管材时是否会出现问题呢,是的,确实出现了问题。由于管材的封闭性&a…

识别产品外观的合格软件_你还在犹豫?外观检测设备使用已成主流!

今天跟大伙聊一聊关于各种瓶子的外观检测/视觉检测。我们都知道,不管是瓶子、杯子还是其他的,在生产过程种对产品的质量检测这种有着超高重复性动作与随机应变能力的工作,在以前的工业时代,完全依靠人“人眼识别”人工检测来完成&…

jsessionid每次请求都在变_为什么每次沟通都变争吵,学会这4条沟通原则,解决90%的沟通问题...

沟通重要吗?太重要了,可以这么说,我们在生活中遇到的绝大部分问题其实都是沟通问题。你的身边有这样的对话吗?老婆对丈夫说:“老娘当初瞎眼了才看上你,成天就知道打牌“妈妈对儿子说:”你看看人…

常见食物营养成分表图_营养成分表,你会看么?

中国居民对于营养标签的认知较低。一项针对中国五城市居民的调查显示,仅有40.54%的消费者会阅读营养标签。恭喜你成为其中之一。这是什么数据?营养成分表通常有三项主要内容,从左到右依次为营养素的名称、营养素的含量以及营养素参考值&#…

android 自定义view滚动条,Android自定义View实现等级滑动条的实例

Android自定义View实现等级滑动条的实例实现效果图:思路:首先绘制直线,然后等分直线绘制点;绘制点的时候把X值存到集合中。然后绘制背景图片,以及图片上的数字。点击事件down的时候,换小图片为大图片。move…

android短信验证码代码,Android短信验证码自动填写实现代码

今天给大家分享一个Android短信验证码自动填写的功能。先看下效果图,我发送了一条短信到手机,自动填写验证码。如图:这个小功能运用到了观察者模式,什么是观察者模式?观察者模式 :定义对象间的一种一个(Sub…

android 评论的展开功能,Android开发实现ListView点击展开收起效果示例

本文实例讲述了Android开发实现ListView点击展开收起效果。分享给大家供大家参考,具体如下:废话不说先上效果:实际上这是采用一个ExpandableListView实现的布局文件很简单:xmlns:android"http://schemas.android.com/apk/res…

画流程图activiti流程图_干货!小白也能一天画100张高逼格流程图

今天是在一起两周年零128天纪念日~你喜滋滋地订好了花,买好了酒,暗暗盘算着下班以后赶紧走~不料老板的命令从天而降“出100张流程图,今天给我!”What???100张!!&#xff…

linux修图,修图只知道Photoshop?11款高逼格修图工具快来get!

精致的产品是在线商店成功的一个重要元素。虽然Adobe Photoshop长期以来一直是编辑图像的行业标准,但也有许多免费或廉价的应用程序和类似的工具。本文将为大家介绍一些Photoshop的替代品,包括在线应用程序和图形软件套件,它们都具有创建动态…

Android10打断动画,Android开发(10) 动画(Animation)

概述Android SDK介绍了两种Animation:Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种 渐变动画 ,或者说 补间动画。Frame Animation:顺序播放事先做好的图像,是…

safari浏览器横屏怎么设置_如何避免苹果safari自带浏览器“跟踪”你的信息!

苹果自带的“safari浏览器”正在悄悄“追踪”你的信息,这样做可以有效避免你的隐私信息不被泄露。说起苹果设备自带的APP,毫无疑问safari浏览器是其中的代表之一,很多朋友由于习惯的原因,大多在使用苹果设备的时候选择下载一些第三…

自动提示_EXCEL2013版突然打不开,自动修复提示1907错误

由于系统升级或电脑进行修复操作,导致EXCEL突然打不开。office自动修复的时候提示错误1907。无法注册字体。请确认有足够的权限安装字体,并且系统支持此字体。解决方法一:直接点击忽略即可。一般点击一下忽略,它没有反应&#xff…

matlab去除图片水印_(水印去除技巧)3个在线图片水印去除网站,值得收藏

嗨!大家好!我是网罗小帅。很高兴和大家见面。今天是五一放假的第一天。有人说,新媒体人你不佩有五一假期。我太“南”了!今天带来一波图片,视频去水印技巧干货神器。有时候我们看到一些漂亮的壁纸,但是别人…