二、变量和引用

1.  变量的命名:

        在Shell 中,变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头。对于变量名的长度,Shell并没有做出明确的规定。因此,用户可以使用任意长度的字符串来作为变量名。但是,为了提高程序的可读性,建议用户使用相对较短的字符串作为变量名。
        在一个设计良好的程序中,变量的命名有着非常大的学问。通常情况下,用户应该尽可能选择有明确意义的英文单词作为变量名,尽量避免使用拼音或者毫无意义的字符串作为变量名。这样的话,用户通过变量名就可以了解该变量的作用。
2.   变量的类型:
        1>.  根据数据类型分类:
                Shell是一种动态类型语言和弱类型语言,即在Shell中,变量的数据类型毋需显示地声明,变量的数据类型会根据不同的操作有所变化。准确地讲,Shell 中的变量是不分数据类型的,统一地按照字符串存储。但是根据变量的上下文环境,允许程序执行一些不同的操作,例如字符串的比较和整数的加减等等。
                可以使用declare定义变量的类型:declare attribute variable注:declare命令还可输出所有的变量、函数、整数和已经导出的变量。
                -p:显示所有变量的值。
                -i:将变量定义为整数,在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整数,就设置为0
                -r:将变量声明为只读变量。只读变量不允许修改,也不允许删除。(也可使用readonly定义只读变量)。
                -a:变量声明为数组变量。但这没有必要,所有变量都不必显示定义就可以用作数组。事实上,在某种意义上,似乎所有变量都是数组,而且赋值给没有下标的变量与赋值给下标为0的数组元素相同。
                -f:显示所有自定义函数,包括名称和函数体。
                -x:将变量设置成环境变量。可使用+x将变量变成非环境变量。
        2>.  根据作用域分类:
                 根据作用域可将变量分为环境变量(全局变量)和普通变量(局部变量)。
                1、环境变量:环境变量也可称为全局变量,可以在创建它们的shell及其派生出来的任意子进程shell中使用(su - 切换用户会读取新的环境变量),环境变量又可分为自定义环境变量和bash内置的环境变量。
                        (1)自定义环境变量:一般是指用export内置命令导出的变量,用于定义shell的运行环境,保证shell命令的正确执行。环境变量可以在命令行中设置和创建,但用户退出命令行时这些变量值就会丢失,即该环境变量只在当前shell和子shell中有效。如果希望永久保存环境变量,可以在配置文件中设置。
①用户的环境变量配置(non-login shell)
~/.bash_profile或~/.bashrc
②全局环境变量的配置(login shell)
/etc/bashrc、/etc/profile文件或者/etc/profile.d目录中定义。
注意:按照系统规范,所有环境变量的名字均采用大写形式。在将环境变量应用于用户进程程序之前,都应该用命令export导出。
有一些环境变量,比如HOME,PATH,SHELL,UID,USER等,在用户登录前就已经被/bin/login程序设置好了,通常环境变量被定义并保存在用户家目录下的.bash_profile文件或全局的配置文件/etc/profile 中。
                        
                        (2)bash内置的环境变量:shell内置的环境变量是所有的shell程序都可以使用的变量。shell程序在运行时,都会接收一组变量来确定登录用户名、命令路径、终端类型、登录目录等,这组变量就是环境变量。环境变量会影响到所有的脚本的执行结果。
变量
说明
PATH
命令搜索路径,以冒号为分隔符
HOME
用户主目录的路径名,是cd命令的默认参数
COLUMNS
定义了命令编辑模式下可使用命令行的长度
HISTFILE
命令历史文件
HISTSIZE
命令历史文件中最多可包含的命令条数
HISTFILESIZE
命令历史文件中包含的最大行数
IFS
定义shell使用的分隔符
LOGNAME
当前的登录名
SHELL
shell的全路径名
TERM
终端类型
TMOUT
shell自动退出的时间,单位为秒,若设为0则禁止shell自动退出
PWD
当前工作目录
                       (3)普通变量也可称为局部变量,与全局变量相比,局部变量的使用范围较小,通常仅限于某个程序段访问,例如函数内部。在Shell语言中,可以在函数内部通过local关键字定义局部变量,另外,函数的参数也是局部变量。
示例:全局变量和局部变量的区别:
[root@localhost ~] # vim 6.sh
#!/bin/bash
# 定义函数
func()
{
        #输出全局变量 v1 的值
        echo "global variable v1 is $v1 "
        #定义局部变量 v1
        local v1 = 2
        #输出局部变量 v1 的值
        echo "local variable v1 is $v1 "
}
#定义全局变量v1
v1 = 1
#调用函数
func
 #输出全局变量 v1 的值
echo "global variable v1 is $v1 "
[root@localhost test] # chmod a+rx var.sh
[root@localhost test] # ./var.sh </
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值