当前位置: 首页 > 科技观察

Shell的基本语法之一:什么是变量?

时间:2023-03-12 07:20:39 科技观察

本书中,我们将shell的基本语法分为5个部分:变量、运算符、条件、循环、函数(其实任何编程语言都可以说是由这些部分组成的)。本节简单介绍一下Shell的基本语法,有其他语言经验的读者可能更容易理解。如果你没有其他语言的经验,你可以通过多写几个Shell脚本来理解它。1、什么是变量?顾名思义,变量通常是可变的。在计算机编程语言中,这是第一个要理解的概念。简单来说,数学上就是计算公式中的x,物理上就是一块内存空间。声明一个变量时,相当于在计算机内存中开辟了一块地方来存放变量符号。它会被不断赋值,每次赋值时都会清空之前的值,里面会保存当前值的数据。2、变量赋值赋值示例:war_name=yaomm##Assignmentyaomm本数据给出了变量变量war_name的赋值规则:变量名和等号之间不能有空格,例如“war_name=yao”。名称只能使用英文字母、数字和下划线,首字符不能以数字开头,如“3war”。变量名中间不能有空格,可以使用下划线“_”,如“warname”。变量名不能使用标点符号,例如点“.”,例如“.=yaomm”。bash中的关键字不能使用(使用help命令查看保留关键字),如“bash=233”。3.变量使用示例[root@linuxido~]#var_name=yaomm##?变量赋值,将var_name变量赋值给yaomm[root@linuxido~]#echo${var_name}##?使用echo打印变量,变量以【${}】开头的方式引用yaomm[root@linuxido~]#echo$var_name##?也可以用【$+变量名】输出变量值yaomm[root@linuxido~]#echo"var_nameis$var_name"##==>变量可以用双引号括起来例如,如果有一个名为var_nameexe的变量,其值为23,那么echo$var_nameexe应该打印什么值?4.可变参数传递什么是可变参数传递?也就是在写脚本的时候保留一个变量,然后从外面的值中传入一个特定的值给这个变量。示例如下:[root@linuxidoshell]#cat001.sh##?查看第一个用【vi001.sh】#!/bin/bash#author编辑的脚本:姚猫猫的博客echo《shell传参示例!echo'第一个参数${1}:'${1}echo'第二个参数$2:'$2echo'参数个数$#:'$#echo'所有参数显示为字符串$*:'$*echo'的所有参数组合成一个数组$@:'$@echo'当前脚本进程号PID:'$$[root@linuxidoshell]#sh001.shyaomm666##?Execute001.sh,有2个参数:yaomm,666Shell传递参数实例!第一个参数$1:yaomm第二个参数$2:666个参数个数$#:2所有参数以字符串显示$*:yaomm666所有参数组合成一个数组$@:yaomm666当前脚本进程号PID:65134参数传输规则:$0:脚本本身的文件名。$#:传递给脚本的参数个数。$n:传递给脚本的第一个参数,n是传递参数的顺序。$*:所有参数组合成一个字符串。$@:所有参数,一个数组。$$:当前脚本运行的进程号PID。$?:返回前一个脚本和函数的结果。当要执行的脚本是全路径时,使用$0获取脚本路径。如果只想获取脚本路径或脚本名,可以使用[dirname]和[basename]这两个命令,如下所示:[root@linuxido/shell]#dirname/shell/001.sh##?Get路径/shell[root@linuxido/shell]#basename/shell/001.sh##?得到脚本名001.sh5。数组在Shell中除普通变量外,还有一个数组变量(只支持一维数组)。与其他语言类似,数组下标从0开始,不同的是数组的内容要用括号表示,数组的元素要用空格隔开。下面是一个例子:[root@linuxidoshell]#war_array=(yao"mm"1987)##?打印所有的数组元素yaomm1987[root@linuxidoshell]#echo${war_array[2]}##?打印第三个数组元素mm[root@linuxidoshell]#echo${#war_array[@]}##?数组元素个数为4[root@linuxidoshell]#echo${#war_array[*]}##?数组个数元素为4或使用下标定义数组:war_array[0]=ywar_array[1]=aowar_array[='mm'war_array[3]=2021