Linux - 9. Base Shell (1)
[ 2009-08-12 11:15:36 | 作者: yuhen ]
Base Shell 很强大,就是语法忒别扭。作为系统管理脚本语言,是每个 Linux 使用者必须掌握的。
1. 变量
变量分为 "自定义变量" 和 "环境变量",区别在于环境变量可以被带入子程序。
定义变量和无类型的动态语言差不多,调用的时候则需要添加 "$" 前缀 (把变量当做指针),或者写成 "${name}" 格式。
可以用 unset 取消变量定义。
我们还可以用另外一种方式声明变量。
(1) 整数变量
这个不能没有。
(2) 只读变量
这个在写脚本的时候很实用。
(3) 数组变量
数组是最基本的数据结构。
(4) 定义环境变量
和 export 作用相同。
(5) 附加操作
在读取变量时,我们还可以附加一些操作。
(6) 默认值
我们还可以提供变量默认值。
评论Feed: http://www.rainsts.net/feed.asp?q=comment&id=850
1. 变量
变量分为 "自定义变量" 和 "环境变量",区别在于环境变量可以被带入子程序。
$ name="Q.yuhen" # 定义变量,注意等号前后不能包含空格。 $ echo $name # 显示变量 Q.yuhen $ bash # 启动子程序 $ echo $name # 显示变量失败 $ exit # 退出子程序 exit $ export name # 提升变量为环境变量 $ bash # 再次进入子程序 $ echo $name # 显示变量成功 Q.yuhen
定义变量和无类型的动态语言差不多,调用的时候则需要添加 "$" 前缀 (把变量当做指针),或者写成 "${name}" 格式。
$ echo "name=$name" # 在双引号中,变量会被解析
name=Q.yuhen
$ echo "field=$nameField" # 很显然,这种写法要找的是名为 "nameField" 变量
field=
$ echo "field=${name}Field" # 换种写法
field=Q.yuhenField
$ echo 'field=${name}Field' # 在单引号中变量不会被解析
field=${name}Field
$ echo \$name # 也可以用 \ 进行转义,让变量失效
$name可以用 unset 取消变量定义。
$ echo $name Q.yuhen $ unset name # 注意取消变量,而不是变量内容,无需 $ 。 $ echo $name # 呵呵,没有了。 $
我们还可以用另外一种方式声明变量。
(1) 整数变量
这个不能没有。
$ num=1024*10 $ echo $num # 默认会被当做字符串 1024*10 $ declare -i num=1024*10 # 用 declare 和 -i 参数就可以定义整数变量了 $ echo $num 10240
(2) 只读变量
这个在写脚本的时候很实用。
$ declare -ri num=1024*10 # r 参数表示只读 $ echo $num 10240 $ num=1234 # 吼吼,失败了。 bash: num: readonly variable
(3) 数组变量
数组是最基本的数据结构。
$ declare -a list # a 参数表示定义数组 $ list[0]="a" # 和 C 的规则非常类似,记住不要添加 $ 。 $ list[1]="b" $ echo $list # 还记得 C 里面,数组默认指向第一个元素的地址吗? a $ echo $list[1] # 实用元素序号访问 a[1]
(4) 定义环境变量
和 export 作用相同。
$ declare -x name="Q.yuhen" $ export ... declare -x name="Q.yuhen" ...
(5) 附加操作
在读取变量时,我们还可以附加一些操作。
- #: 左侧删除子串,最短匹配。
- ##: 左侧删除子串,最长匹配。
- %: 右侧删除,最短匹配。
- %%: 右侧删除,最长匹配。
- /: 替换,仅第一个匹配。
- //: 全部替换。
$ echo $s
/home/yuhen/python
$ echo ${s#/*/} # 左侧删除 "/*/",最短匹配。
yuhen/python
$ echo ${s##/*/} # 左侧删除 "/*/",最长匹配。
python
$ echo ${s%/*} # 右侧删除 "/*",最短匹配。
/home/yuhen
$ echo ${s%%/*} # 右侧删除 "/*",最长匹配。(晕~~~,全干掉了)
$ s=$s/yuhen
$ echo $s
/home/yuhen/python/yuhen
$ echo ${s/yuhen/q.yuhen} # 将第一个 yuhen 替换成 q.yuhen
/home/q.yuhen/python/yuhen
$ echo ${s//yuhen/q.yuhen} # 将所有的 yuhen 全部替换成 q.yuhen
/home/q.yuhen/python/q.yuhen(6) 默认值
我们还可以提供变量默认值。
- ${var=expr}: var 未设置时,输出 expr。
- ${var:=expr}: var 未设置或为空字符串时,输出 expr。
$ echo $s
$ echo ${s="yuhen"}
yuhen
$ s=""
$ echo ${s="yuhen"}
$ echo ${s:="yuhen"}
yuhen
[最后修改由 yuhen, 于 2010-08-06 09:33:11]
评论Feed: http://www.rainsts.net/feed.asp?q=comment&id=850







&不是取地址么,应该是*哇~~
&不是取地址么,应该是*哇~~