shell(1)
参考链接: http://c.biancheng.net/view/743.html C语言中文网
读取: read
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
修改变量的值
已定义的变量,可以被重新赋值,如:
url="http://c.biancheng.net"
echo ${url}
url="http://c.biancheng.net/shell/"
echo ${url}
第二次对变量赋值时不能在变量名前加$,只有在使用变量时才能加 $.
单引号和双引号的区别
#!/bin/bash
name="wangqiang"
name1='${name}'
name2="${name}"
echo $name1
echo $name2
运行结果:
${name}
wangqiang
以单引号’ '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。
以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义。
我的建议:如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景
将命令的结果赋值给变量
variable=`command`
variable=$(command)
只读变量
readonly name="wangqiang"
删除变量
unset name
变量的作用域(Scope)
在 Shell 中定义的变量,默认就是全局变量
在 Shell 函数中定义的变量默认也是全局变量,它和在函数外部定义变量拥有一样的效果
#!/bin/bash
#定义函数
function func(){
a=99
}
#调用函数
func
#输出函数内部的变量
echo $a
输出结果:
99
a 是在函数内部定义的,但是在函数外部也可以得到它的值,证明它的作用域是全局的,而不是仅限于函数内部。
要想变量的作用域仅限于函数内部,那么可以在定义时加上local命令,此时该变量就成了局部变量。
#!/bin/bash
#定义函数
function func(){
local a=99
}
#调用函数
func
#输出函数内部的变量
echo $a
输出结果为空,表明变量 a 在函数外部无效,是一个局部变量。