Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1153384
  • 博文数量: 222
  • 博客积分: 5262
  • 博客等级: 大校
  • 技术积分: 3028
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-22 19:10
文章分类

全部博文(222)

文章存档

2012年(2)

2011年(192)

2010年(28)

分类:

2011-01-22 11:05:06

原文地址:Shell基础知识 作者:SodaGreen_wyj

1.shell特殊变量:

   $# 传送给命令Shell的参数序号 
    $- 在Shell启动或使用set命令时提供选项 
    $? 上一条命令执行后返回的值 
    $$ 当前shell的进程号 
    $! 上一个子进程的进程号 
    $@ 所有的参数,每个都用双括号括起 
    $* 所有参数,用双括号括起 
    $n 位置参数值,n表示位置 
    $0 当前shell名 

2. "通配符"

      * 匹配任何位置 
    ? 匹配单个字符 
    [] 匹配的字符范围或列表 


3.数据或程序控制使用的特殊字符 
    >(file)  输出重定向到文件中(没有文件则创建,有则覆盖) 
    >>(file) 输出重定向到文件中(没有则创建,有则追加到文件尾部) 
    <(file)  输入重定向到文件 
    ;        命令分割符  
    |        管道符  
    &        后台运行(例如:sleep 10 &) 
    ``      (数字1旁边的字符)命令替换,重定向一条命令的输出作为另一命令的参数 
 

4.对于引用或逃逸的特殊字符

      Bsh用单引号' '和双引号" 

      将特殊字符或由空白分隔的字引用起来组成一个简单的数据串.使用单引号和双引号的区别是双引号中的内容可进行参数和变量替换.逃逸字符也一样. 

      $echo "$HOME $PATH" 
     结果显示$/u/ice_walk/bin:/etc:/usr/bin 
     而$echo '$HOME $PATH' 结果显示$HOME $PATH    

      Shell的逃逸符是一个"\",表示其后的字符不具有特殊的含义或不是shell的函数

      $echo \$HOME $PATH
     结果显$HOME /bin:/etc:/usr/bin: 

5.Bsh的变量

    当Shell遇到一个"$"符时(没有被引用或逃逸),它将认为其后为一变量。不论该变量是环境变量还是用户自定义的变量,在命令行中变量名要被变量值替换。

    现在详细的介绍下Bsh的变量。Bsh中有四类变量:用户定义的变量、位置变量(shell参数)、预定义变量及环境变量。

用户定义的变量由字母和下划线组成,并且变量名的第一个字符不能为数字(0~9)。与其他UNIX名字一样,变量名是大小写敏感的。用户可以在命令行上用"="给变量赋值,例如: 
      $NAME=ice_walk 
给变量NAME赋值为ice_walk,在应用变量NAME的时候,在NAME前加"$"即可。

    在应用shell变量时候,可以在变量名字两边$后面加上{},以更加清楚的显示给shell,哪个是真正的变量,以实现字符串的合并等功能。


Bsh可以进行变量的条件替换,即只有某种条件发生时才进行替换。替换条件放在一对大括号{}中,如:
1).${variable: -value}

variable是一变量值,value是变量替换使用的默认值

$echo Hello $UNAME
    结果显示:Hello
$echo Hello ${UNAME: -there} 
    结果显示:Hello there
$echo $UNAME 
    结果显示: (空)

$UNAME=John

$echo Hello ${UNAME: -there} 
    结果显示:Hello John

可以看出,变量替换时将使用命令行中定义的默认值,但变量的值并没有因此而改变。

另外一种替换的方法是不但使用默认值进行替换,而且将默认值赋给该变量。其形式如下:
2).${variable:=value} 

该形式在变量替换后同时把值value符给变量variable。
$echo Hello $UNAME 
    结果显示:Hello
$echo Hello ${UNAME:=there} 
    结果显示:Hello there
$echo $UNAME 
    结果显示:there
$UNAME=John 
$echo Hello ${UNAME:-there} 
    结果显示:Hello John

变量替换的值也可以是` `括起来的命令:

$echo $T

       结果显示为空

$echo ${T:-`pwd`}

       结果显示为执行命令pwd

第三种变量的替换方法是只有当变量已赋值时才用指定值替换形式: 
3). ${variable: +value}

只有变量variable已赋值时,其值才用value替换,否则不进行任何替换,例如:

$ERROPT=A 
$echo ${ERROPT: +"Error tracking is acitive"} 
    结果显示:Error tracking is acitive
$ERROPT= 
$echo ${ERROPT: +"Error tracking is acitive"} 
    结果显示: (空)  

我们还可以使用错误检查的条件进行变量替换: 
4) .${variable:?message} 
  当变量variable已设置时,正常替换。否则消息message将送到标准错误输出(若此替换出现在shell程序中,那么该程序将终止)。 例如: 
$UNAME= 
$echo ${UNAME:?"UNAME HAS NOT BEEN SET"} 
    结果显示:UNAME HAS NOT BEEN SET

$UNAME=Stephanie 
$echo ${UNAME:?"UNAME HAS NOT BEEN SET"} 
    结果显示:Stephanie

当没有指定message时,shell将显示一条默认的消息,例如: 

$UNAME= 
$echo ${UNAME:?} 
    结果显示:sh:UNAME:parameter null or not set


6.位置变量或Shell参数

    在shell解释用户的命令时,将把命令行的第一个字作为命令,而其他的字作为参数。当命令对应的可执行文件为Shell程序时,这些参数将作为位置变量 传送给该程序。第一个参数记为$1,第二个为$2....第九个为$9。其中1到9是真正的参数名,"$"符只是用来标识变量的替换。

    位置变量$0指命令对应的可执行文件名。

7.echo命令可以使用一些特殊的逃逸字符进行格式化输出,下面是这些字符及其含义: 
    \b  Backspace
    \c  显示后不换行
    \f  在终端上屏幕的开始处显示
    \n  换行
    \r  回车
    \t  制表符
    \v  垂直制表符
    \   反斜框
    \0nnn 用1,2或3位8进制整数表示一个ASCII码字符


  


 




阅读(843) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~