变量
linux 中变量分为, 本地变量, 环境变量, 位置变量
本地变量: 类似C 中的局部变量, 在新启动的shell中不存在, 只有当前shell中先定义了, 之后才能引用
环境变量: 适用于所有由登陆进程产生的子进程, 简言之, 环境变量在用户登陆后到注销之前的所有编辑器, 脚本和程序都有效
位置参数: 也属于变量, 它用于向shell脚本传递参数, 是只读的(可见, shell脚本也是传值)
变量赋值
如果变量值有空格, 则必须加"" 号, 所以这里强调一下, 在引用变量时, 最好也加上"", 例如我们系统中crontab在执行时, 如果不"", 那么引用变量无法使用
varibale="value" "$variable"
crontab job 的例子待补充
这里介绍一下 let , 用来可以进行整数运算
#!/bin/bash
a=2009
let "a+=1"
echo "a=$a"
环境变量
位置参数
是一种特殊的shell变量, 用于从命令行向shell脚本传递参数, $1表示第一个参数, $2表示第2个.. $0表示脚本名, $*和$@一样, 表示全部参数,$#表示参数个数
$$ 脚本运行的进程号, $?命令退出状态, 0表示没有错误, 非0表示有错误
引用
引用指将字符串用引用符号引起来, 以防止特殊字符被 shell脚本重解释为其他意义. 例如:
ls a* # 无引用, *被解释为通配符
ls "a*" # 引用后, *被解释为字面含义
"" 双引号
可以引用除 $ ` 这三种以外的所有字符, 也就是说这3种在双引号内部也具有特殊意义. (部分引用)
如: "$variable"表示以变量值替换变量名, 利用双引号引用变量能够防止字符串分割, 保留变量中的空格, 例如:
#!/bin/bash
variable=2010
echo "$variable" #显示结果 2010
echo $variable #显示结果 2010
variable2="x y z"
echo "$variable2" #显示结果 X Y Z
echo $variable2 #显示结果 x y z, 很显然, 这个结果不是我们想要的
'' 单引号,
单引号可以引用一切字符, 即所有字符在单引号里都是字面量,没有特殊值, 因此成为全引用
命令替换
命令替换是指将命令的标准输出作为值赋给某个变量, bash shell定义了两种语法进行命令替换, 一种是 ``, 另一种是$()
例如:
echo `who`
dirlist=`ls -l a*` #命令替换
echo $dirlist #因为没加""号, 所以换行符被删除, 给出的结果是1行字符串
echo "$dirlist" #给出的结果是多行字符串
尽管 $()与``号在命令替换上是等价的, 但是$()形式的命令替换是可以嵌套的(另外, 进行数学运算时, 这种形式常用)
firstlinelength=$(expr length "$(sed -n '1p' input)")
#!/bin/bash
variable="()\{}$""
echo $variable #显示结果 (){}$"
echo "$variable" #显示结果 (){}$"
exit 0