加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell变量一

发布时间:2020-12-15 23:19:41 所属栏目:安全 来源:网络整理
导读:1.变量类型 变量可分为两类:环境变量(全局变量)和局部变量。 环境变量也可称为全局变量,可以在创建他们的shell及其派生出来的任意子进程shell中使用。局部变量只能在创建他们的shell函数或脚本中使用。还有一些变量是用户创建的,其它的则是专用shell变

1.变量类型

  变量可分为两类:环境变量(全局变量)和局部变量。

  环境变量也可称为全局变量,可以在创建他们的shell及其派生出来的任意子进程shell中使用。局部变量只能在创建他们的shell函数或脚本中使用。还有一些变量是用户创建的,其它的则是专用shell变量。

2.环境变量(全局变量)

  1)环境变量

  环境变量用于定义shell的运行环境,保证shell命令的正确执行,shell通过环境变量来确定登录用户名、命令路径、登录目录等,所以的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器、shell脚本和各类应用。

  环境变量可以再命令行中设置,但用户退出时这些变量值也会对视,因此最好在用户家目录下的.bash_profile文件中或全局配置/etc/bashrc,/etc/profile文件或者etc/profile.d中定义。将环境变量放入profile文件中,每次用户登录时这些变量值都将被初始化。

  传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。

  环境变量可用在创建他们的shell和从该shell派生的任意子shell或进程中。他们通常被称为全局变量以区别局部变量。通常,环境变量应该大写。环境变量是已经用export内置命令导出的变量。

  有一些环境变量,比如HOME、PATH、SHELL、UID、USER等,在用户登录之前就已经被/bin/login程序设置好。通常环境变量定义并保存在用户家目录下的.bash_profile文件中。

  2)设置环境变量(全局变量)

  设置环境变量(设置之后需要生效该变量,可以用"."点加载,eg:./etc/profie)

  如果想设置环境变量,就要在给变量赋值之后或设置变量时使用export命令。带-x选项的declare内置命令也可完成同样的功能。(注意:输出变量时不要在变量名前加$)

  • 设置变量格式

  在/etc/profile 文件中添加,一般在最后一行添加。

  ①export 变量名(一般大写)=value

  ②变量名=value

  export 变量名(export可以导出多个变量名 export 变量名1 变量名2,各个变量名之间用空格隔开)

  ③declare -x 变量名=value

  3)显示与取消环境变量

  显示环境变量

  ①echo $变量名

  ②用env(printenv)或set显示默认的环境变量

  取消环境变量

  unset 变量名(取消环境变量时不要加$,这只是临时取消,并不是永久取消,要想永久取消还需要写在环境变量文件中 /etc/profile)

3.局部变量

  1)定义本地变量

  本地变量在用户当前的shell生存期的脚本中使用。例如,本地变量XXX取值为yusheng,这个值只在用户当前shell生存期中有意义。如果在shell中启动另一个进程或退出,本地变量XXX值将无效。

  2)普通字符串变量定义

  变量名=value

  变量名=‘value‘

  变量名="value"

  shell中变量名的要求:一般是字母,数字,下划线组成。字母开头,不使用关键字(只是建议)

  eg:

a=192.168.1.1
b=192.168.1.1 #单引号中是什么变量值就是什么
c="192.168.1.1"
echo "a=$a"
echo "b=$b"
echo "c=${c}"#$c 与${c}等同
>>>>>
a=192.168.1.1
b=192.168.1.1
c=192.168.1.1
View Code

提示:

  第一种定义a变量的方式是直接定义变量内容,内容一般为简单连续的数字、字符串、路径名等。

  第二种定义b变量的方式是通过单引号定义变量。这个方式的特点是:输出变量时引号里是什么就输出什么,即使内容中有变量也会把变量名原样输出。此法比较适合定义显示纯字符串。

  第三种定义c变量方式是通过双引号定义变量。这个方式的特点是:输出变量时引号里的变量会经过解析后输出该变量内容,而不是吧引号中变量名原样输出,适合字符串中附带有变量的内容的定义。

  习惯:数字不加引号,其他默认加双引号

  注意:awk调用shell单双引号与此结论相反,单引号解析,双引号不解析。

  建议:

  ①纯数字(不带空格),定义方式可以不加引号(单或双)。

  ②没特殊情况,字符串一般用双引号定义,特别是多个字符串中间有空格时。

  ③变量定义内容需要原样输出时,用单引号

  3)变量命名的规范

  ①变量命名要统一,使用全部大写字母,如PHONE_NUM;语义要清晰,能够正确表达变量内容的含义,过长的英文单词可采用前几个字符代替。多个单词连接使用“_”下划线连接,引用时,最好以${PHONE_NUM}加大括号或"${PHONE_NUM}"外面加双引号方式引用变量;

  ②避免无含义字符或数字

  ③脚本中全局变量和局部变量命名

  ⑴脚本中的全局变量定义,如PATH,在变量使用时,使用{}大括号将变量括起或"${PATH}"

  ⑵脚本中的局部变量定义:存在于脚本函数(function)中的变量称为局部变量,要以local方式进行声明,使之只在本函数作用域内有效,防止变量在函数中的命名与变量外部程序中变量重名造成程序异常。

function Testfunc{
    local a
    for((a=0;a<3;a++))
    do
        echo "morning"
    done
}
View Code

  ④变量合并:当某些变量或配置要组合起来才有意义时,如文件的路径和文件名称,建议将要组合的变量合并到一起赋值给一个新的变量,这样既方便之后的调用,也为以后的修改提供方便。

  ⑤总结:多学习系统自带的/etc/init.d/functions函数库脚本的定义思路。

3.把命令定义为变量

  ①CMD=`ls`

  • "CMD=`ls`"注意命令变量前后的字符``(为键盘tab键上面的那个,不是单引号)
  • 在变量名前加$,可以取得此变量的值,使用echo命令可以显示变量的值,$A和${A}的写法不同,但是功能一样,推荐使用后者或"${A}"的用法
  • ${WEEK}day若变量和其他字符组成新的变量就必须给变量加上大括号{}.
  • 最好将所有字符串变量用双引号括起来使用的习惯,将会减少很多编程时遇到的怪异的错误,具体使用方法如"$A"或"${A}"的用法

  ②cmd=$(ls)(推荐)

  执行命令变量:echo $变量名

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读