Shell变量

一、变量分类

根据作用域分三种
(一)只在函数内有效,叫局部变量
(二)只在当前shell进程中有效,叫做全局变量
(三)在当前shell进程与子进程中都有效,叫做环境变量

shell进程与子进程
打开一个Shell窗口就创建了一个Shell进程,打开多个Shell窗口就创建了多个Shell进程,每个Shell进程都是独立的,拥有不同的进程ID。
创建Shell子进程最简单的方式是运行bash命令。通过exit命令可以一层一层地退出Shell。

根据变量类型分:
(一)字符串。shell变量默认都是字符串。
如果想使用其他类型,必须在后续使用时自行转换
(二)字符串数组。


二、变量定义
(一)语法格式
根据作用域:
1.定义局部变量
local varname=value
必须加上local,否则就变成全局变量了。

2.定义全局变量
varname=value

3.定义环境变量
export varname=value
或者
varname=value
export varname

4.还可以定义只读变量
只读变量的值不能被改变。
varname=value
readonly varname
 

说明:
varname是变量名
value是值
=是赋值运算符
等号两边不能有空格,这可能和你熟悉的所有编程语言都不一样

按类型定义:
1.字符串
字符串可以用单引号,也可以用双引号,也可以不用引号。
(1)单引号
str='hello world!'
单引号里的任何字符都会原样输出,也就是说转义都无效。
单引号中的变量是无效的
单引号中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

(2)双引号
str="hello world!"
双引号里可以使用变量
双引号里可以使用转义字符\


(3)不加引号
str=helloworld!
不加引号的话,字串中不能有空格


2.数字
因为shell变量都是字符串,所以定义数字就是定义字符串。
num1=1
num2="2"
num3='3'
a=5.0
b='2.5'


3.数组
shell数组只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。数组元素的下标由0开始。
用括号来表示,元素用"空格"符号分割开,语法格式如下
b=(1 2 3 4)
b=("a" 1 3)
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2


(二)变量名命名规定
1.命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
2.不能有空格
3.不能使用标点符号
4.不能使用bash里的关键字(可用help命令查看保留关键字)
5.环境变量一般都用大写


有效的Shell变量名示例如下:
RUNOOB
LD_LIBRARY_PATH _var
var2
无效的变量命名:
?var=123
user*name=runoob

(三)变量定义的地方
1.临时地点
在命令行或者脚本中定义,这种方式在退出shell进程后变量失效。也就是说,无论是全局变量、环境变量,只要是在这种地方定义的,脚本退出后,统统失效。
2.永久地点
在用户配置文件.bash_profile、.bashrc文件中或系统配置文件/etc/profile、/etc/profile.d/中定义。
每次打开shell时,都会先执行一次上述文件。
系统默认在永久地点定义了一些环境变量
我们也可以在永久地点添加一些自定义环境变量。


三、变量读取
读取变量的值一般形式:
$varname
${varname}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。
比如下面这种情况:for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done
如果不加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量,代码执行结果就不是我们期望的样子了。

推荐给所有变量加上花括号,这是个好的编程习惯。


读取数组元素值的格式是:
${array_name[index]}

获取数组中的所有元素:
${my_array[*]}
${my_array[@]}

获取数组的长度:
${#my_array[*]}
${#my_array[@]}


四、删除变量
使用unset命令可以删除变量。
语法:
unset variable_name
变量被删除后会失效。
unset命令不能删除只读变量。

myUrl="https://www.runoob.com"
unset myUrl
echo $myUrl
以上实例执行将没有任何输出。


五、查看变量
(一)查看所有变量
set     查看所有变量和函数
(二)只查看环境变量
env     查看所有环境变量
export -p     查看所有环境变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值