shell脚本中的变量

目录

一、什么是变量

二、变量的类型

1. 自定义变量

1.1 基本的四则运算

1.2 let

1.3 自增自减

1.4 小数运算

2.其他变量

2.1 环境变量

2.2 只读变量

2.3 位置变量

2.4 预定义变量

之前讲到了shell脚本的概念和它大概是怎样的一个运行模式,以及如何运行一个shell脚本。接下来需要讲shell脚本中一个非常重要的东西,那就是变量。

一、什么是变量

还是同样的,讲一个东西之前,我们要先知道,什么是变量呢?其实和数学中的变量x差不多,只不过这个变量不只是x,可以是任何数字字母组成(特殊字符和空格除外),然后呢这个变量也不是像数学里那样有什么定义域是随机的,它的值是我们主动赋予的。如果这么说不理解的话,我们举个例子。

如果,x=1,那我输出x的话,会话框里会显示什么内容?

很明显,会显示1啊。

那么,再稍微来个复杂那么一丢丢的例子

定义一个变量 beijing=capital   

然后我们输出 beijing  会显示什么?

会显示 captial ,如图

注意:这个 $ 就是引用变量的值,如果没有 $ ,那么只会输出beijing

变量这个东西还是很好理解的吧?

二、变量的类型

变量也分很多种,有自定义变量、环境变量、只读变量、位置变量、预定义变量

用的最多的应该就是自定义变量了,我们着重讲一下自定义变量,其他的看情况就稍微介绍一下吧。

1. 自定义变量

自定义变量很好理解,就是我们自己创建的变量,用于储存一些值,我们之前演示的两个例子,就都属于自定义变量。

 想要输出这些变量的值,就通过 $ 来实现

好,我们知道了自定义变量,知道了如何使用这个自定义变量,现在有问题了,我们使用自定义变量来干什么呢?

1.1 基本的四则运算

关于自定义变量可以展开许多用法,比如排序、函数等等,我们先从简单的开始,先用自定义变量进行简单的四则运算。

+ - * / 加减乘除,这个应该不用多解释了,那么这些符号怎么使用?

先从数字开始举例,这里要用到一个命令,expr,expr命令可以对整数进行运算

很好理解吧,echo 只是输出了1 + 1这个整体,二expr对1+1进行了运算 (注意空格)

接下来我也不一一细讲了,主要是要知道它的输入规则,知道了之后就一通百通了。但是,乘法要特别强调一下,乘法的 * 号,在输入的时候会提示语法错误,因为 * 在Linux中作为一个特殊字符有其他的含义,所以,我们需要使用 \ (转义符) 来将 * 号回归它的初衷,取消它的特殊含义。下面是一些案例,都很简单易懂,主要是要记住。

这里最后一个%是取余的意思,就是被除数 整除 除数,得到的余数

expr 不仅可以进行数字的运算,也可以进行变量的运算,比如定义了x=1,y=1 

那么直接  expr $x + $y   就可以了,注意符号两边需要空格

同样也是非常好理解的,就不多赘述

那么,我偏要用echo就行四则运算,怎么办呢?其实用 echo 也是可以的,只不过步骤比较繁琐一点

其实就是加了个$符,如何套了两个小括号,或者一个中阔号,没什么说法。

细心的你可能发现了,这里*号前面没有加\,对的,括号里的符号不需要转义

1.2 let

现在出现了新的问题了,这里只有加减乘除啊(还有取余),既然是可以计算,那乘方运算呢?

这里就需要用到 let  命令,let 可以通过运算改变变量的值,但是不会显示,需要echo将其输出我们才能看见,举个简单的例子就可以看明白了

let 是完成了计算的,就是我们不知道而已

现在我们言归正传,乘方怎么实现呢?

其实很简单,就是两个 * 号就可以了

比如 let x=3 ** 3 

那么x的输出结果就是27

1.3 自增自减

然后有个和循环息息相关的东西,就是自增 i++ 和自减 i-- ,什么是自增自减呢?就是假如给x=1,那么 x ++ 就是每执行一次,x就+1,执行n次就 + n,自减就是反过来

自减同理,就是反过来

这玩意有啥用呢?每次加一个,其实这个就类似于计数器,在执行某一操作的时候我配上自增,最后看自增的结果就可以知道执行了多少次操作,自减的话相当于设置了一个阈值吧,比如减到0,我就终止某操作,这个后面讲循环嵌套的时候再洗说,现在只要知道什么是自增自减就行了。

1.4 小数运算

然后,说了大半天,有人肯定会问,怎么全是整数运算?作为一个计算机,小数运算都没法操作吗?

小数运算也是可以实现的,使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进入交互界面,可以用echo结合管道使用

scale=x    ---用来指定小数点后x位

这个也是只要讲一下如何使用,规则是啥,知道了就一通百通了,主要是多敲,敲完了记住,这里你可以算出我的x、y分别设的是多少吗?(不用算我就是自己做的时候都忘了前面设的多少了)

除此之外,bc命令还可以做逻辑判断,如果结果为真输出1,结果为假输出0,什么个意思呢?

 

就是这么个意思,和C语言一样,等于号要写==,!=是 ‘不等于’ 的意思,所以3不等于2,输出结果为真

2.其他变量

其他的变量都不是那么的重要,我就简单的概述概述吧

2.1 环境变量

环境变量是在操作系统中预定义的一组动态命名值,用于影响程序行为。它们在Shell脚本中用来传递配置和操作系统信息

常见的环境变量有:PATH(指定可执行文件的搜索路径)、HOME(当前用户的主目录)、USER(当前登录的用户名)、SHELL(当前用户的默认Shell解释器)、LANG(当前系统语言设置)、RANDOM(随机数)。

这些具体也没什么好解释的,就是字面含义,要多说一句的就是随机数是生成0—32767的随机数

PATH作为路径是可以修改的,我们之前切换到别的目录后,shell脚本需要加上bash 或者 sh 或者绝对路径才可以执行

pwd 查看当前路径,

PATH="$PATH:/当前路径",就可以直接使用命令了

注意PATH后面千万不能为空,为空的话会很麻烦

2.2 只读变量

顾名思义,只可以读取,不能修改或者删除的变量,只读变量一旦设置后,其值不可改变。它们用于定义常量,以防止脚本中意外更改这些值

可以看到,没办法对 b 进行任何操作,那么我现在就像对 b 进行操作,该怎么办呢?先出去一下,就好了

2.3 位置变量

位置变量用于获取传递给脚本或函数的命令行参数,就是,当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

说起来可能有点抽象,还是用例子来说明吧

首先编辑一个 .sh 文件,里面内容写上这些

编写完之后保存退出,我们来解读一下,首先脚本会执行useradd命令,useradd命令是需要用户名的,此时$1 就是用户名, 然后脚本执行passwd,将 $2 输入到 $1用户中,这里的$1 $2 ,就是位置变量,如果脚本还有其他要执行的命令就依次传入$3 $4 ...

具体就是这么用的,可以看到lbw 用户被创建的了,而且还设有密码

2.4 预定义变量

预定义变量由Shell预先定义,用于存储Shell会话的特定信息和状态

常见的状态有

$!:最后一个后台进程的PID。

$@:表示列出所有位置参数,但是是以单个的形式的列出

$#:表示命令行中位置参数的个数

$$ :当前Shell进程的PID。

$*:表示所有位置参数的内容,这些内容当做一个整体

$0:表示当前执行的脚本或程序的名称

$_:上一个命令的最后一个参数或命令的结果。

$?:上一个命令的退出状态码。

用法也和环境变量一样,直接echo 就好了

一些其他的补充的

双引号  " "  用于保留字符串中的大部分字符,但允许变量和命令替换,在双引号中,$\ 仍然具有特殊含义,其他字符会被视为普通字符。

单引号 ' '  用于保留字符串中的所有字符,包括空格、特殊字符等。单引号内的内容不会进行变量替换或命令替换,单引号中,所有字符都会被视为普通字符。

反引号  ` `  用于命令替换,即将反引号中的命令执行并将结果插入到字符串中,在某些情况下会被替代为$()这在嵌套命令时更为清晰。

暂时先讲这么多吧,之后会继续增加内容,欢迎大家一起学习。

  • 39
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值