Shell学习(2)--Shell变量

来源:互联网 发布:用java编写菱形 编辑:程序博客网 时间:2024/05/21 21:48

在Shell中,变量的定义很简单。

Shell变量

定义变量

var="ddiicey"

需要注意的是,与平时我所编写的高级语言(C、C++、Python)等不同,变量名和“=”之间不能有空格。变量名的命名与其他语言一样都遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,并且首个字符不能以数字开头,但可以以下划线“_”开头
  • 变量名中间不能有空格,可以后下划线
  • 不能使用标点符号
  • 不能使用Shell中的关键字作为变量名
下面给出了Shell中一些合法以及非法的变量名示例:
合法的变量名:
RUNOOBLD_LIBRARY_PATH_varvar2


非法的变量名:
?varuser+name^runoob


除了上述这种显式的直接赋值方式,还可以用语句给变量赋值,如:
for file in `ls /etc`


以上语句是将/etc下目录的文件名循环出来。请注意,上述符号为“·”,而并不是单引号“‘”

使用变量
使用一个定义过的变量,只需要在变量名前添加$符号即可,如:
user_name="ddiicey"echo $user_nameecho ${user_name}


变量名外面的花括号是可选的,加花括号是为了帮助解释器识别变量的边界,如下面的这种情况:

user_name="ddiicey"echo $user_nameecho ${user_name}


如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把$skillScript当成一个变量(其未初始化,值为空),代码执行结果就不是我们所期望的样子了。
所以在此,推荐给所有变量加上花括号,这是一个很好的coding style。

对于已经定义的变量,可以被重新定义,如:
user_name="ddiicey"echo ${user_name}user_name="tiangeng"echo ${user_name}

这是合法的,但是该段语句的执行完成后,user_name是第二次定义的值。

只读变量
在实际中,为了防止如上对变量重新定义,可以将变量使用readonly命令定义为只读变量,这样就可以防止变量被修改。

#!/bin/bashuser_name="ddiicey"readonly user_nameuser_name="tiangeng"

对于上述脚本,在运行的时候会报错,结果如下:
/bin/sh: NAME: This variable is read only.

删除变量
使用unset命令可以删除变量,语法如下:
unset variable_name

unset命令不能删除readonly只读变量。

变量类型
运行shell的时候,会同时存在三种变量:
  1. 局部变量 局部变量是在脚本或命令中定义,尽在当前shell实例中有效,其他shell启动的程序不能访问局部变量
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其能正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量 shell变量是有shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。

shell数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
与C语言类似,数组单元的下标由0开始编号。获取数组中的元素要使用下标来索引,下标可以是整数或者算术表达式,其值应该大于或等于0.

定义数组
在shell中,用括号来表示数组,数组元素中用“空格”符号分隔开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)

例如:
array_name=(value0 value1 value2)

或者:
array_name=(value0value1value2)


还可以单独定义数组的各个分量:
array_name[0]=value0array_name[1]=value1array_name[2]=value2

可以不使用连续的下标,而且下标的范围没有限制。

读取数组
读取数组元素值的一般格式是:
${数组名[下标]}

例如:
valuen=${array_name[n]}


使用@符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}

获取数组的长度
获取数组长度的方法如下:
# 取得数组元素的个数length=${#array_name[@]}# 或者length=${#array_name[*]}# 取得数组单个元素的长度length=${#array_name[n]}


同样,知道了数组元素的个数和数组单个元素的长度后,就可以知道所占据内存的大小了。




阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 佳能相机卡口 托身白刃里接卡口 无限之狩人 接卡口 银行卡号 查银行卡号 社保卡号 信用卡卡号 建行卡号 卡号大全 查社保卡号 卡号 什么是卡号 卡号是什么 卡号查银行 手机卡号 卡号网 卡号查询 羊城通卡号 sim卡号 邮政卡号 公积金卡号 虚拟卡号 挑卡号 怎么查卡号 卡号办理 燃气卡号 卡号激活 id卡 卡号 炫舞卡号 储值卡卡号 什么卡号 查询银行卡号 银行卡号大全 输入卡号查询开户行 查看银行卡号 怎么查银行卡号 银行卡号查询 2019银行卡号大全和真实名字 银行卡号归属地查询 忘记银行卡号 社保卡号查询