1 变量
2
3 在使用echo的时候,我们其实已经使用过变量了,在C语言中,我们可以使用 var = value来进行赋值,var是变量名, value是赋给变量的值,=两端有无括号都行.那么在shell中,变量赋值是否跟C中的是一样的呢? 来看一下吧
4 var=value
5 注意:var=value 与 var = value是不一样的,var=value是赋值操作,var = value是相等操作.
6 来看一下例子:
7 root@xue-desktop:/home/xue# var=hello
8 root@xue-desktop:/home/xue# echo $var
9 hello
10 root@xue-desktop:/home/xue# var = hello
11 No command 'var' found, did you mean:
12 Command 'jar' from package 'openjdk-6-jdk' (main)
13 Command 'jar' from package 'fastjar' (main)
14 Command 'jar' from package 'gcj-4.3' (universe)
15 Command 'jar' from package 'gcj-4.4-jdk' (main)
16 Command 'dar' from package 'dar' (universe)
17 Command 'vdr' from package 'vdr' (universe)
18 Command 'xar' from package 'xar' (universe)
19 Command 'vax' from package 'simh' (universe)
20 Command 'tar' from package 'tar' (main)
21 Command 'ar' from package 'binutils' (main)
22 Command 'ar' from package 'binutils-multiarch' (universe)
23 Command 'rar' from package 'rar' (multiverse)
24 Command 'sar' from package 'sysstat' (main)
25 Command 'sar' from package 'atsar' (universe)
26 Command 'par' from package 'par' (universe)
27 var: command not found
28 root@xue-desktop:/home/xue#
29
30 那么,如果value中包含空白字符(如空格)的话,那么就一定要使用'或者"(单引号,双引号).如:
31 root@xue-desktop:/home/xue# var=hello world
32 No command 'world' found, did you mean:
33 Command 'tworld' from package 'tworld' (universe)
34 world: command not found
35 root@xue-desktop:/home/xue# var="hello world"
36 root@xue-desktop:/home/xue# echo $var
37 hello world
38 root@xue-desktop:/home/xue#
39
40 从上面我们也可以知道怎么来引用变量的值:
41 使用
42 echo $var
43 或
44 echo ${var}
45
46 环境变量
47 环境变量是未在当前进程中定义,而从父进程中继承而来的变量.我们所熟知的PATH就是其中一个环境变量.使用echo $PATH来查看一下:
48 root@xue-desktop:/home/xue# echo $PATH
49 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
50 root@xue-desktop:/home/xue#
51
52
53 来看一下有关变量的技巧。
54 (1)获得字符串的长度
55 root@xue-desktop:/home/xue# var=0123456789
56 root@xue-desktop:/home/xue# echo ${#var}
57 10
58 root@xue-desktop:/home/xue#
59 (2)查看当前的SHELL版本
60 root@xue-desktop:/home/xue# echo $SHELL
61 /bin/bash
62 root@xue-desktop:/home/xue#
63 (3)检查是否为超级用户
64 基本思路:UID是一个重要的环境变量,可以用于检查当前脚本是否以超级用户还是以普通用户的身份运行的,例:
65 1 #!/bin/bash
66 2 #file name : uid.sh
67 3 #2012-11-13 22:53
68 4
69 5 if [ $UID -ne 0 ]; then
70 6 echo "Non root user. Please run as root."
71 7 else
72 8 echo "Root user"
73 9 fi
74 ~
75 上面的脚本看不懂也没关系,在这里我们只需要知道,root用户的UID是0
76 (4)修改Bash提示字符串
77 我们登录的时候,打开终端,可以看到xue@xue-desktop:~$ 这样的提示(每个人都可能不一样,但都类似)
78 这是因为默认的shell提示文本是由PS1来设置的,来看一下PS1的值吧:
79 xue@xue-desktop:~$ echo $PS1
80 \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
81 xue@xue-desktop:~$
82
83
84 Shell进行数学运算
85 在bash shell中,可以使用let, (()),以及[]执行基本的算术运算操作,还可以使用expr和bc这两个工具来进行运算.
86 root@xue-desktop:~# a=1
87 root@xue-desktop:~# b=2
88 root@xue-desktop:~# c=$a+$b
89 root@xue-desktop:~# echo $c
90 1+2
91 root@xue-desktop:~#
92 从上面我们可以看出,当我们使用普通变量赋值方法定义数值的时候,它会被存储为字符串,那么我们该怎么样才能使它能像数字一样进行处理呢?
93 来看一下let命令吧,let命令可以直接执行基本的算数操作.
94 例:
95 root@xue-desktop:~# a=1
96 root@xue-desktop:~# b=2
97 root@xue-desktop:~# let c=a+b
98 root@xue-desktop:~# echo $c
99 3
100 root@xue-desktop:~#
101 从上面我们可以看出,当使用let的时候,变量名前面不需要再添加$.
102 除了使用let, 还可以使用其他的方法, 如:
103 root@xue-desktop:~# a=1
104 root@xue-desktop:~# b=2
105 root@xue-desktop:~# c=$[ a + b ]
106 root@xue-desktop:~# echo $c
107 3
108 root@xue-desktop:~#
109 root@xue-desktop:~# c=$[ $a + $b ]
110 root@xue-desktop:~# echo $c
111 3
112 root@xue-desktop:~#
113 还能用(()),例:
114 root@xue-desktop:~# a=1
115 root@xue-desktop:~# b=2
116 root@xue-desktop:~# c=$((a+1))
117 root@xue-desktop:~# echo $c
118 2
119 root@xue-desktop:~# c=$(($a+1))
120 root@xue-desktop:~# echo $c
121 2
122 root@xue-desktop:~#
123