四时宝库

程序员的知识宝库

Linux知识点之shell变量(shell变量的种类)

1.定义变量

定义变量时,变量名不加美元符号($,PHP 语言中变量需要),如:

your_name="anvs.cn"

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

中间不能有空格,可以使用下划线(_)。

不能使用标点符号。

不能使用 bash 里的关键字(可用 help 命令查看保留关键字)

有效的 Shell 变量名示例如下:

Bash
RUNOOB
LD_LIBRARY_PATH
_var
var2

无效的变量命名:

Bash
?var=123
user*name=anvs

除了显式地直接赋值,还可以用语句给变量赋值,如:

Bash
for file in `ls /etc`for file in $(ls /etc)

以上语句将 /etc 下目录的文件名循环出来。

2.使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

Bash
your_name="qinjx"
echo $your_name
echo ${your_name}

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

Bash
for skill in Ada Coffe Action Java; do
 echo "I am good at ${skill}Script"
done

如果不给 skill 变量加花括号,写成 echo "I am good at $skillScript",解释器就会把$skillScript 当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。推荐给所有变量加上花括号,这是个好的编程习惯。已定义的变量,可以被重新定义,如:

Bash
your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写 $your_name="alibaba",使用变量的时候才加美元符($)。

3.只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错:

Bash
#!/bin/bash
myUrl="https://www.anvs.cn"
readonly myUrl
myUrl="https://www.anvs.cn"

运行脚本,结果如下:

Bash
/bin/sh: NAME: This variable is read only

4.删除变量

使用 unset 命令可以删除变量。语法:

Bash
unset variable_name

变量被删除后不能再次使用。unset 命令不能删除只读变量。

实例

Bash
#!/bin/sh
myUrl="https://www.anvs.cn"
unset myUrl
echo $myUrl

以上实例执行将没有任何输出。

5.变量类型

运行 shell 时,会同时存在三种变量:

1) 局部变量 局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访问局部变量。

2) 环境变量 所有的程序,包括 shell 启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候 shell 脚本也可以定义环境变量。

3) shell 变量 shell 变量是由 shell 程序设置的特殊变量。shell 变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了 shell 的正常运行

Shell 字符串

字符串是 shell 编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

6.单引号

Bash
str='this is a string

单引号字符串的限制:

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

7.双引号

Bash
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

输出结果为:

Bash
Hello, I know you are "anvs"!

双引号的优点:

双引号里可以有变量

双引号里可以出现转义字符

8.拼接字符串

Bash
your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3

输出结果为:

Bash
hello, anvs ! hello, anvs !
hello, anvs ! hello, ${your_name} !

9.获取字符串长度

Bash
string="abcd"
echo ${#string} #输出 4

10.提取子字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:

Bash
string="anvs is a great site"
echo ${string:1:3} # 输出 nvs

注意:第一个字符的索引值为 0

11.查找子字符串

查找字符 v 的位置 (哪个字母先出现就计算哪个):

Bash
string="anvs is a great site"
echo `expr index "$string" v` # 输出 2

注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接