Linux - 9. Base Shell (1)

[ 2009-08-12 11:15:36 | 作者: yuhen ]
字号: | |
Base Shell 很强大,就是语法忒别扭。作为系统管理脚本语言,是每个 Linux 使用者必须掌握的。

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 评论Feed: http://www.rainsts.net/feed.asp?q=comment&id=850

浏览模式: 显示全部 | 评论: 2 | 引用: 0 | 排序 | 浏览: 1011
引用 Ling
[ 2010-07-09 03:08:52 ]
调用的时候则需要添加 "$" 前缀 (把变量当做指针,$ 当做 & 就行了)

&不是取地址么,应该是*哇~~
引用 yuhen
[ 2010-08-06 09:27:21 ]
引用至 Ling
调用的时候则需要添加 "$" 前缀 (把变量当做指针,$ 当做 & 就行了)
&不是取地址么,应该是*哇~~
已修正

发表评论
表情图标
[smile] [confused] [cool] [cry]
[eek] [angry] [wink] [sweat]
[lol] [stun] [razz] [redface]
[rolleyes] [sad] [yes] [no]
[heart] [star] [music] [idea]
UBB代码
转换链接
表情图标
悄悄话
用户名:   密码:  
验证码 * 请输入验证码