Shell编程知识
普通变量
定义本地变量
本地变量在用户当前Shell生存期的脚本中使用。
1)普通变量定义
变量名=value
变量名=‘value’
变量名=“value”
2) 在Shell中定义变量名及为变量内容赋值的要求
变量名一般是由字母、数字、下划线组成的,可以以字母或者下划线开头。
变量的内容可以用单引号或者双引号引起来,也可以不加引号,但是这三者的含义是不同的。
3)普通变量的定义及输出的示例
提示:
变
量
名
表
示
输
出
变
量
,
可
以
用
变量名表示输出变量,可以用
变量名表示输出变量,可以用c和
c
两
种
方
法
4
)
变
量
定
义
的
基
本
技
巧
总
结
a
=
192.168.1.2
−
{c}两种方法 4)变量定义的基本技巧总结 a=192.168.1.2-
c两种方法4)变量定义的基本技巧总结a=192.168.1.2−a
b='192.168.1.2-
a
′
c
=
"
192.168.1.2
−
a' c="192.168.1.2-
a′c="192.168.1.2−a"
第一种定义a变量的方式是不加任何引号直接定义变量的内容,当内容为简单连续的数字、字符串、路径名时,可以这样用,例如:a=1, b=oldboy等。不加引号时,值里有变量的会被解析后再输出,上述变量定义中因为$a的值被解析为192.168.1.2(范例3-3执行的影响),因此新的a值就是192.168.1.2-192.168.1.2。
第二种定义b变量的方式是通过单引号定义。这种定义方式的特点是:输出变量内容时单引号里是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。
第三种定义c变量的方式是通过双引号定义变量。这种定义方式的特点是:输出变量内容时引号里的变量及命令会经过解析后再输出内容,而不是把双引号中的变量名及命令(命令需要反引起来)原样输出。
老男孩经验:
数字内容的变量定义可以不加引号,其他没有特别要求的字符串等定义最好都加上双引号,如果真的需要原样输出就加单引号,定义变量加双引号是最常见的使用场景。
5)把一个命令的结果作为变量的内容赋值的方法
对需要获取命令结果的变量内容赋值的常见方法有两种:
变量名=‘ls’
变量名=$(ls)
提示:生产场景中把命令的结果作为变量的内容进行赋值的方法在脚本开发中很常见
局部变量定义及赋值的经验小结
常规普通变量定义:
□若变量内容为连续的数字或字符串,赋值时,变量内容两边可以不加引号,例如a=123。
□变量的内容很多时,如果有空格且希望解析内容中的变量,就加双引号,例如a="/etc/rc.local
U
S
E
R
"
,
此
时
输
出
变
量
会
对
内
容
中
的
USER" ,此时输出变量会对内容中的
USER",此时输出变量会对内容中的USER进行解析然后再输出。
□希望原样输出变量中的内容时就用单引号引起内容进行赋值,例如:a=’
U
S
E
R
′
。
希
望
变
量
的
内
容
是
命
令
的
解
析
结
果
的
定
义
及
赋
值
如
下
:
□
要
使
用
反
引
号
将
赋
值
的
命
令
括
起
来
,
例
如
:
a
=
‘
l
s
‘
;
或
者
用
USER'。希望变量的内容是命令的解析结果的定义及赋值如下:□要使用反引号将赋值的命令括起来,例如:a=`ls`;或者用
USER′。希望变量的内容是命令的解析结果的定义及赋值如下:□要使用反引号将赋值的命令括起来,例如:a=‘ls‘;或者用()括起来,例如:a=
(
l
s
)
。
变
量
的
输
出
方
法
如
下
:
□
使
用
“
(ls)。 变量的输出方法如下: □使用“
(ls)。变量的输出方法如下:□使用“变量名”即可输出变量的内容,常用“echo
变
量
名
”
的
方
式
,
也
可
用
p
r
i
n
t
f
代
替
e
c
h
o
输
出
更
复
杂
的
格
式
内
容
。
变
量
定
义
的
技
巧
及
注
意
事
项
:
□
注
意
命
令
变
量
内
容
前
后
的
字
符
‘
‘
(
此
字
符
为
键
盘
T
a
b
键
上
面
的
那
个
反
引
号
,
不
是
单
引
号
)
,
例
如
:
“
C
M
D
=
‘
l
s
‘
”
。
□
在
变
量
名
前
加
变量名”的方式,也可用printf代替echo输出更复杂的格式内容。 变量定义的技巧及注意事项: □注意命令变量内容前后的字符``(此字符为键盘Tab键上面的那个反引号,不是单引号),例如:“CMD=`ls`”。 □在变量名前加
变量名”的方式,也可用printf代替echo输出更复杂的格式内容。变量定义的技巧及注意事项:□注意命令变量内容前后的字符‘‘(此字符为键盘Tab键上面的那个反引号,不是单引号),例如:“CMD=‘ls‘”。□在变量名前加可以取得该变量的值,使用echo或printf命令可以显示变量的值,
A
和
A和
A和{A}的写法不同,但效果是一样的。
□用echo等命令输出变量的时候,也可用单引号、双引号、反引号,例如:echo
A
、
e
c
h
o
"
A、echo "
A、echo"A"、echo '
A
′
,
它
们
的
用
法
和
前
面
变
量
内
容
定
义
的
总
结
是
一
致
的
。
□
A',它们的用法和前面变量内容定义的总结是一致的。 □
A′,它们的用法和前面变量内容定义的总结是一致的。□dbname_tname,当变量后面连接有其他字符的时候,必须给变量加上大括号{},例如:
d
b
n
a
m
e
t
n
a
m
e
就
要
改
成
dbname_tname就要改成
dbnametname就要改成{dbname}_tname。
变量定义及变量输出说明
建议:
□在脚本中定义普通字符串变量时,应尽量把变量的内容用双引号括起来。
□单纯数字的变量内容可以不加引号。
□希望变量的内容原样输出时需要加单引号。
□希望变量值引用命令并获取命令的结果是就用反引号或$().