博主
发布于 2025-01-25 / 17 阅读 / 0 评论 / 0 点赞

01.变量默认值设置

shell中的变量

定义

变量的几个理解性定义

  1. 变量是值可以变化的,不可变化的叫常量,是一种特殊的变量。

  2. 变量是用于存储数据值的名称。

  3. 变量定义时变量名只能由大小写,数字,下划线这3种类型的字符组成,首字符不能是数字,大写习惯用来表示常量。

  4. 变量名不能与内置的关键字相同,比如if,for等。

  5. 变量的调用通过$var_name实现,var_name就是定义的变量名称。

  6. 删除变量使用unset var_name实现

  7. 环境变量为由操作系统或用户设置的特殊变量,用于配置 Shell 的行为和影响其执行环境

  8. 变量值中如有双引号,可以使用转义符\放在双引号前面实现。

变量类型

一般shell中变量类型不做特殊声明,如有需求,也可以明确限制

变量定义限制

格式为declare [-aAfFgilrtux] [-p] [name[=value] ...]

-a:声明数组

-A:声明关联数组

-i:声明整型变量

-r:声明只读变量

-u/-l :将变量值转换为大写/小写

-x:将变量导出为环境变量

#!/bin/bash
# 定义一个只能存放整数的变量a,值设置为10
declare -i a
a=10
# 定义一个关联数组
declare -A a
# 为关联数组赋值
a['key1']=value1

特殊的declare -x说明

declare -x表示将该变量直接共享给当前shell的子进程

示例如下:

[root@k8s01 study-shell]# cat var-01.sh 
#!/bin/bash
declare -x martin=abc
echo "parent display martin value is ${martin}"
bash -c "./var-02.sh"
./var-02.sh
[root@k8s01 study-shell]# cat var-02.sh 
#!/bin/bash
echo "${martin:-defalt value 123}"

[root@k8s01 study-shell]# bash var-01.sh 
parent display martin value is abc
abc
abc
[root@k8s01 study-shell]# bash var-02.sh 
defalt value 123
[root@k8s01 study-shell]# 

解释:如上在01中定义了一个共享变量martin,如果执行01,由于01中定义并共享了martin这个变量,所以执行02的时候可以打印出来变量值,但是如果直接执行02,则显示02中定义的默认值

默认值设置

当脚本中需要获取一个变量值,如果变量不存在,则会报错,为避免此种情况,可以在调用时设置默认值,当存在时取变量的值,不存在时取默认值。

使用方法如下

${var:-value}

解释

var为变量名称

:-为固定格式

value为默认值

样例

a='abc' 
echo ${a:-111} # 由于a变量存在,所以返回a的值abc
unset a 
echo ${b:-111} # 由于a变量被取消,即不存在,所以返回默认值111

特殊变量

系统默认有一些特殊变量的调用方法

$?  代表上一个命令或者函数的执行结果
$#  代表上一个命令或者函数的参数个数
$*   代表执行脚本传入参数的列表
$@ 表示获取执行脚本传入的所有参数
$$   表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
其中$@与$*正常情况下一样,当在脚本中将$*加上双引号作为“$*”引用时,此时将输入的所有参数当做一个整体字符串对待。比如输入参数有a b c三个参数,则“$*”表示“a b c”一个字符串。
$1 代表脚本的第一个参数,依此类推
$0 代表当前shell的文件名

评论