shell变量
1、脚本语言不用定义变量类型,shell是脚本语言,所以不用定义变量类型。
注意:即使你将整数、小数 赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。
2、变量定义分成三种:
variable=value (没有空格、tab缩进时可以用)
variable=‘value’ (有空格、tab缩进时用;) (单引号就是直接以字符串的形式输出所有引号里面的东西)
variable=“value” (有空格、tab缩进时用;)(两者区别是双引号会先解析引号里的东西,再进行输出 或别的操作)
最好用双引号括起来!!!!
(1)对于variable 变量名:
它的命名规范和大部分编程语言都一样:
- 变量名由数字、字母、下划线组成;
- 必须以字母或者下划线开头;
- 不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。
(2)变量的使用:
【1】 $ {}
name=“li sir” (=号左右切记不能有空格!!!)
echo $name (使用一个定义过的变量,前面需要加 $ 符号)
echo “hello ${name} ,welcome” (加花括号是为了帮助解释器识别变量的边界,推荐给所有变量加上花括号{ }
,这是个良好的编程习惯!!!)
【2】 ()内的命令可以作为一个变量赋值给另一个变量 (常用括号形式的,另一种忽略就好)
我在 code 目录中创建了一个名为 log.txt 的文本文件,用来记录我的日常工作。下面的代码中,使用 cat 命令将 log.txt 的内容读取出来,并赋值给一个变量,然后使用 echo 命令输出。
[mozhiyan@localhost ~]$ cd code [mozhiyan@localhost code]$ log=$(cat log.txt) [mozhiyan@localhost code]$ echo $log [2017-09-10 06:53:22] 严长生正在编写Shell教程 [mozhiyan@localhost code]$ log=`cat log.txt` [mozhiyan@localhost code]$ echo $log [2017-09-10 06:53:22] 严长生正在编写Shell教程 [mozhiyan@localhost code]$
(3)只读变量:
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
- #!/bin/bash
- myUrl="http://see.xidian.edu.cn/cpp/shell/"
- readonly myUrl
- myUrl="http://see.xidian.edu.cn/cpp/danpianji/"
运行脚本,结果如下:
/bin/sh: NAME: This variable is read only.
(4)删除变量:unset
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用;unset 命令不能删除只读变量。
举个例子:
- #!/bin/sh
- myUrl="http://see.xidian.edu.cn/cpp/u/xitong/"
- unset myUrl
- echo $myUrl
上面的脚本没有任何输出。
(5)变量类型:
运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行