Chinaunix首页 | 论坛 | 博客
  • 博客访问: 262764
  • 博文数量: 54
  • 博客积分: 1761
  • 博客等级: 上尉
  • 技术积分: 585
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-17 23:30
文章分类

全部博文(54)

文章存档

2013年(4)

2012年(7)

2011年(15)

2010年(28)

分类: 系统运维

2013-04-01 17:27:41

变量


变量可大致分为4类:局部变量、环境变量、位置变量和特殊变量


后两者是只读变量
无论何种变量,我们都可以对变量进行一系列变量操作。


${parameter}
返回变量值
${parameter-default}, ${parameter:-default}
测试变量是否设置,未设置则返回默认值,但变量不改变
${parameter+alt_value}, ${parameter:+alt_value}
测试变量是否设置,已设置则返回默认值,但变量不改变
${parameter=default}, ${parameter:=default}
测试变量是否设置,未设置则返回默认值,变量也改变
${parameter?err_msg}, ${parameter:?err_msg}
测试变量是否设置,未设置则打印报错信息
${#var}
获取变量长度
${var#Pattern}, ${var##Pattern}
变量不被修改。删除开头部分匹配pattern的部分,#最短匹配,##最长匹配
${var%Pattern}, ${var%%Pattern}
变量不被修改。删除结尾部分匹配pattern的部分,%最短匹配,%%最长匹配
${var:pos}
${var:pos:len}
变量截断,从cos开始,len长度的字符串
${var/Pattern/Replacement}
变量替换,首次出现patter的地方,替换成rep
${var//Pattern/Replacement}
变量替换,全局出现patter的地方,替换成rep

hiro@v-pc:~$ var="hello"
hiro@v-pc:~$ echo ${#var}
5
hiro@v-pc:~$ echo ${var:2}
llo
hiro@v-pc:~$ echo ${var:1:2}
el
hiro@v-pc:~$ echo ${var/ll/xx}
hexxo
hiro@v-pc:~$ echo ${var/l/x}
hexlo
hiro@v-pc:~$ echo ${var//l/x}
hexxo
hiro@v-pc:~$ echo ${var#*e}
llo
hiro@v-pc:~$ echo ${var%o}
hell
hiro@v-pc:~$ echo ${var:-world}
hello
hiro@v-pc:~$ echo ${var:+world}
world


变量类型
shell变量是没有类型的,但是也可以通过其他方式强加定义
declare/typeset命令可设置各种变量

-i integer
-r readonly 相当于readonly var
-a array 相当于      
-f function
-x export

变量数组
bash和ksh有所不同

点击(此处)折叠或打开

  1. #!/usr/bin/bash
  2. declare -a mon
  3. mon=( Jan Feb Mar Apr )


  4. echo ${#mon[*]}
  5. echo ${mon[2]}
  6. ############ksh
  7. #!/usr/bin/ksh
  8. set -A mon -- Jan Feb Mar Apr

  9. echo ${#mon[*]}
  10. echo ${mon[2]}

局部变量
赋值即可
只有在当前进程中有用,一旦进入子进程。其会失效。  
set 返回当前所有变量        
unset 取消变量值                          

环境变量
环境变量是作为一个进程间通信的方式之一。
export可将变成提升为环境变量。
env返回当前所有环境变量                                     

位置变量
$1 $2
根据位置返回参数和命令行                                        

特殊变量
$* 将所有参数放入到一个变量中       
$# 参数数量                      
$$ 返回当前进程号        
$@ 将所有参数放入不同的引号中                         
$? 上次进程的返回值       
$! 上次进程的进程号
                                                                                                                                                                      
环境

登陆过程中,linux完成一系列的操作。
验证用户名和密码,为用户开启登陆shell
随后加载profile,
从/etc/profile开始,到$HOME/.profile。每个Linux加载的东西可能有所不同,但是这两个文件必然会被加载,而其他文件是否会被加载可能已经在这里定义了。
可设置的东西
umask
PS1
PS2
TERM
ulimit
其他安全类的操作(例如验证用户登陆数)

.logout
文件在用户登出时可被调用                                  

stty可用于终端设置
stty设置相应的操作对应于相应的文件符
stty -a 显示所有操作              
stty -g 保存所有操作   
stty action_name action_value  设置操作                                 

引号                                                             

“”
可以引用除$,`和\以外的所有字符。但是shell遇到上述上个字符时,尝试解析变量等操作。                                                                                                  
‘’
可以引用任何字符而不必进行解析                                     
``
执行命令并返回结果,和$()功能相同

                                  
\
防止特殊字符被解析                                                               
                                                                                                                                                                                                                                                                                
阅读(1196) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~