shell编程系列(1)-变量的定义和使用

文章目录

  • 引言
  • 变量的定义
    • 直接定义变量
    • 使用declare命令定义变量
    • 使用let定义变量
  • 变量的作用域
  • 变量的引用
  • 常用的系统变量

引言

在日常工作中经常会遇到需要在Linux系统中写一些脚本来帮助完成一些自动化的操作。但是因为shell编程语法相对比较晦涩,很多语法细节都记不住,因此就打算开一个专栏,系统的记录一下shell编程,方便以后备查。

另外这篇专栏也适用于有一些编程基础并且想快速入门shell编程的同学,这个专栏会挑选shell编程中一些常用的内容进行讲解,略过一些不常用的内容,方便大家可以快速上手。

变量的定义

定义变量是shell编程中必不可缺的部分,定义变量可以不使用关键字直接定义,也可以使用关键字进行定义,关键字定义变量可以控制变量的属性。

直接定义变量

既不使用关键字/命令的方式,如下几种定义方式都是相同的:

# 定义一个变量
v1=1

# 这里的双引号是可选的
v2="hello"

# 如果变量中包含空格或者特殊字符,必须用双引号引起来
v3="hello world"

注意事项:

  1. 变量定义的等号左右不包含空格!! (在shell编程中”=“有两种含义,1.不带空格表示变量赋值;2. 带空格代表比较左右两边是否相等)
  2. 如上不使用关键字定义的变量,默认都是字符串类型!!
  3. 如果变量的内容有空格、$符号等特殊字符,必须使用双引号""

使用declare命令定义变量

上面演示了直接定义变量的方式,但是直接定义存在弊端,无法指定变量的属性,例如变量类型,变量读写控制等。
使用declare定义变量方式如下:

# 定义一个字符串变量
declare str="hello world"

# 定义一个整数变量
declare -i num=100
# 定义一个数字运算
declare -i num2=5+5

# 定义一个只读变量,只读变量无法修改,修改会报错
declare -r Pi="3.1415926"

# 定义一个数组,对于数组的定义和使用后面的文章会专门讲解
declare -a fruitArr=("apple","banana","peach")

declare的详细说明

属性 备注
-i 定义一个整型变量
-r 定义一个只读变量
-a 定义一个数组变量
-x 定义一个环境变量

注意事项:

  1. shell编程中默认不只是浮点数计算,所以在变量声明中也没有浮点数类型
  2. 如果要使用浮点数变量,在定义时候可以先定义为字符串类型,然后通过 bc 命令进行计算赋值给字符串变量。

使用let定义变量

let适用于定义整型变量,以及做数学运算,功能类似于 declare -i ,定义语法如下:

# 定义一个整数
let a=1

# 做数学运算
let b=5+1*2

#如果进行非数字类的运算,计算机结果为0
str="hello world"
num=3
let result=str+num
# 因为str变量是字符串类型,所以运算结果是0
echo $result
0

变量的作用域

shell脚本中定义的变量默认都是全局变量,在整个脚本中都可见,可能会造成变量污染,当脚本的逻辑比较简单时,影响比较小,但是如果脚本逻辑复杂,可能会引发意想不到的bug。
所以好的编程习惯是,如果变量是临时变量,可以使用local关键字定义局部变量。
local关键字语法如下

# 定义一个局部变量
local var="hello"

# 使用场景通常是在函数中如下
# 定义一个全局变量
declare str="hello world"
function func(){
	# 定义局部变量,虽然和全局变量的名称相同,但是在函数内部局部变量优先级高
	local str="hello"
}

变量的引用

定义了变量,我们就会使用变量完成一些操作,所以就涉及到变量的引用,变量应用的语法如下:

#定义一个字符串变量
declare str="hello"

# 引用该变量,方式一
echo $str
#引用该变量,方式二
echo ${str}
# 字符串拼接
echo ${str}world

# 注意如果我们的变量内容包含$,那我们就需要单引号定义变量,如下
declare price='this hat is 100$'

常用的系统变量

变量 说明
$n n是一个整数,从1开始,表示参数的位置,例如$1表示第1个参数,$2表示第2个参数等
$# 命令行参数的个数
$0 当前Shell脚本的名称
$? 前一个命令或者函数的返回状态码
$* 以“参数1参数2……”的形式将所有的参数通过一个字符串返回
$@ 以“参数1”“参数2”……的形式返回每个参数
$$ 返回本程序的进程ID(PID)

你可能感兴趣的:(linux,shell编程,linux,bash)