变量的名字就是变量保存值的地方. 引用变量的值就叫做变量替换.
如果variable1是一个变量的名字, 那么$variable1就是引用这变量的值, 即这边变量所包含的数据.
bash$ variable=23
##############################################
bash$ echo variable
variable
##############################################
bash$ echo $variable
23
##############################################
echo $hello # A B C D
35 echo "$hello" # A B C D
36 # 就象你看到的echo $hello 和 echo "$hello" 将给出不同的结果.
37 # ===============================================================
38 # 引用一个变量将保留其中的空白, 当然, 如果是变量替换就不会保留了.
39 # ===============================================================
##############################################
变量赋值
赋值操作前后都不能有空白
= -eq 可以用来作为条件测试操作,所以不要和赋值操作混淆
a=123
[root@centos129 ~]# echo "the value of \"a\" is $a"
the value of "a" is 123
##############################################
使用let赋值
let a=15+5
[root@centos129 ~]# echo "the value of \"a\" is now $a"
the value of "a" is now 20
##############################################
在for循环中赋值
for i in 7 8 9 11 ; do echo -n "$a " ;done 7 8 9 11
##############################################
使用read命令进行赋值
#!/bin/bash
echo -n "Enter \"a\" "
read a
echo " the value of \"a\" is noew $a"
echo
exit 0
##############################################
简单和复杂两种类型的变量赋值
#!/bin/bash
a=23 这里a=23
echo $a 然后echo出$a
b=$a b等于$a
echo $b echo $b #这里$a=$b
#命令替换 #现在开始命令替换
a=`echo hello!` a等于echo hello 注意这里是反逗号,a等于echo 出的结果 为hello
echo $a #=hello
a=`ls -l` 同理a= ls -l 的结果
echo $a echo $a 应该等于la -l执行的结果
echo
echo "$a"
exit 0
bash 变量是不区分类型的!不像其他语言一样,bash并不对变量区分类型! `本质上, Bash变量都是字符串. 但是依赖于具体的上下文, Bash也允许比较操作和整数操作. 其中的关键因素就是, 变量中的值是否只有数字.
整书还是字符串!
##############################################
如echo "b=$b"
echo
c=BB34
echo "c=$c"
d=${c/BB/23}
echo "d = $d"
let "d+=1"
echo "d = $d"
echo
#null空值!?
e=""
echo "e =$e"
let "e+=1"
echo "e=$e"
echo
#如果没有声明变量会是什么样子!
echo "f=$f"
let "f+=1"
echo "f=$f"
echo
##############################################
执行结果
[root@centos129 tmp]# bash test.sh
a=2335
b=BB35
b=BB35
b=1
c=BB34
d = 2334
d = 2335
e =
e=1
f=
f=1
################################################3
特殊的变量类型
局部变量:这种变量只有在代码快或则函数中才可见
环境变量:这种变量将影响用户接口和shell行为
在通常情况下, 每个进程都有自己的"环境", 这个环境是由一组变量组成的,
这些变量中存有进程可能需要引用的信息. 在这种情况下, shell与一个一般的进程没什么区别.
每次当一个shell启动时, 它都将创建适合于自己环境变量的shell变量.
更新或者添加一个新的环境变量的话, 这个shell都会立刻更新它自己的环境
(译者注: 换句话说, 更改或增加的变量会立即生效),
并且所有的shell子进程(即这个shell所执行的命令)都会继承这个环境.
(译者注: 准确地说, 应该是后继生成的子进程才会继承Shell的新环境变量,
已经运行的子进程并不会得到它的新环境变量).
##########
分配给环境变量的空间是有限的. 创建太多环境变量, 或者给一个环境变量分配太多的空间都会引起错误.
bash$ eval "`seq 10000 | sed -e 's/.*/export var&=ZZZZZZZZZZZZZZ/'`"
bash$ du
bash: /usr/bin/du: Argument list too long
如果一个脚本要设置一个环境变量,那么需要讲这些变量export出来,也就是需要通知到脚本本地的环境,这就是export的功能!
####################################################
一个脚本只能够export变量到这个脚本所产生的子进程,
也就是说只能够对这个脚本所产生的命令和进程起作用.
如果脚本是从命令行中调用的, 那么这个脚本所export的变量是不能影响命令行环境的.
也就是说, 子进程是不能够export变量来影响产生自己的父进程的环境的.
1 #!/bin/bash
2
3 # 作为用例, 调用这个脚本至少需要10个参数, 比如:
4 # ./scriptname 1 2 3 4 5 6 7 8 9 10
5 MINPARAMS=10
6
7 echo
8
9 echo "The name of this script is \"$0\"."
10 # 添加./是表示当前目录
11 echo "The name of this script is \"`basename $0`\"."
12 # 去掉路径名, 剩下文件名, (参见'basename')
13
14 echo
15
16 if [ -n "$1" ] # 测试变量被引用.
17 then
18 echo "Parameter #1 is $1" # 需要引用才能够转义"#"
19 fi
20
21 if [ -n "$2" ]
22 then
23 echo "Parameter #2 is $2"
24 fi
25
26 if [ -n "$3" ]
27 then
28 echo "Parameter #3 is $3"
29 fi
30
31 # ...
32
33
34 if [ -n "${10}" ] # 大于$9的参数必须用{}括起来.
35 then
36 echo "Parameter #10 is ${10}"
37 fi
38
39 echo "-----------------------------------"
40 echo "All the command-line parameters are: "$*""
41
42 if [ $# -lt "$MINPARAMS" ]
43 then
44 echo
45 echo "This script needs at least $MINPARAMS command-line arguments!"
46 fi
47
48 echo
49
50 exit 0
ABS之变量若干
原创
©著作权归作者所有:来自51CTO博客作者风光坏家伙的原创作品,如需转载,请与作者联系,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
JavaScript之变量
JavaScript之变量
赋值 用户名 变量名 -
Solidity之变量类型
本篇文章详细的解释了Solidity常见的变量类型
Solidity 字节数组 数组 字符串 -
playbook之变量使用
playbook变量使用
ansible