Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1247741
  • 博文数量: 261
  • 博客积分: 4196
  • 博客等级: 上校
  • 技术积分: 3410
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-17 17:05
文章分类

全部博文(261)

文章存档

2018年(1)

2017年(22)

2016年(2)

2015年(8)

2014年(27)

2013年(40)

2012年(161)

分类: LINUX

2012-02-27 09:40:07

shell中的变量

变量的声明:在shell中变量不需要事先声明,不必显示声明

变量的赋值:VAR=value,不允许有空格。如:a=100

变量的数据类型:shell中的变量无数据()类型!同一变量可以存放不同类型的值。

       如:a=1.25     a=100     a=“Hello”

变量的获取:在shell中使用$或者${} ,如:$date${date}

Unset:用于删除已经定义的环境变量或本地变量。Unset 变量名

bash的使用技巧

shell维护一个可以用alias unalias内建命令来设置或者取消别名列表。用 alias 命令不带选项的时候显示当前shell所知的别名列表。

自定义时,等号两边不能有空格:alias list=‘ls -l’   alias lsh=‘ls *.sh

Bourne shell保留变量
变量名 定义
auto_resume 这个变量控制shell如何与用户交互和作业控制。
BASH 用于执行当前Bash实例的全路径。
BASH_ENV 如果这个变量在Bash调用执行一个shell脚本时已被设置,它的值将被展开并用作在执行脚本前读取的启动文件名。
BASH_VERSION 当前Bash实例的版本号。
BASH_VERSINFO 一个只读变量数组,它的成员保存这个Bash实例的版本信息。
COLUMNS select 内建命令来决定打印选择列表时终端宽度。在收到 SIGWINCH 信号时自动设置。
COMP_CWORD 包含当前光标位置的字的 ${COMP_WORDS} 的一个索引。An index into ${COMP_WORDS} of the word containing the current cursor position.
COMP_LINE 当前命令行。
COMP_POINT 指明相对于当前命令起点的当前光标位置。
COMP_WORDS 一个由当前命令行中单个词组成的变量数组。
COMPREPLY 一个变量数组,Bash从中读取由一个可编程完整设备调用的一个shell函数生成的可能的完成。An array variable from which Bash reads the possible completions generated by a shell function invoked by the programmable completion facility.
DIRSTACK 一个保存当前目录栈内容的变量数组。
CDPATH 一个由冒号分割的目录列表作为内建命令 cd 的搜索路径。
HOME 当前用户的home目录;默认为内建命令 cd 。这个变量的值同样被~扩展使用。
IFS 分割域的一个字符的列表;用于shell把词分开作为扩展。
MAIL 如果这个变量设成一个文件名并且 MAILPATH 变量没有设置,Bash在指定文件中通知用户邮件的到达。
MAILPATH 一个用冒号分隔的文件名列表,shell周期性地从这个文件里检测新邮件。
OPTARG getopts 内建命令处理的最后的选项参数的值。
OPTIND 最后一个由 getopts 内建命令处理的选项参数的索引号。
PATH 一个用冒号分隔的目录列表,shell从这些目录里寻找命令。
PS1 主要提示符。默认值是 “'\s-\v\$ '”
PS2 次要提示符。默认值是 “'> '”
特殊Bash变量
字符 定义
$* 展开为位置参数,从1开始。当扩展发生在双引号时,它展开成一个单独的词,每个参数的值由 IFS 特殊变量的第一个字符分隔。
$@ 展开为位置参数,从1开始。当在双引号里展开时,每个参数展开成独立的词。
$# 把位置参数展开为十进制数字。
$? 展开成最近执行的前台管道程序的退出状态。
$- 一个连字符展开为当前选项标志 内部命令集 或者那些shell自己的集(如-i
$$ 展开成shell的进程ID
$! 展开成最近在后台(异步)执行的命令的进程ID
$0 展开成shell或者shell脚本名。
$_ 下划线变量在shell启动时设置,包含shell的绝对文件名或者作为参数列表被执行的脚本。随后,它展开为前一个命令扩展后的最后一个参数。它同样设置为每个执行程序的全路径,放在那个命令的输出环境中。当检查邮件时,这个参数保存邮件文件的名字。
shell中的输入与输出

转义字符:“\”

       避免下一个字符被shell解释

echo常见-n(禁用转义字符) -e(可以使用转义字符)

       #!/bin/bash

       echo -e "this 3 lines\n\n\n"

       echo "ok"

       echo "enter you name:"

       read name

       echo "enter you password:"

       read password

       echo $name $password

shell中的命令行替换
替换 语法 含义
历史 ! 前一个命令行
大括号 {} 指定的文本
代字号 ~username 用户的主目录
变量 $,${...} shell 和环境变量
算术 $((...)) 算术运算
命令替换 `...` $(...) 运行在子 shell 中的命令的输出
路径名 *,?,[...],[^...] 文件系统中匹配的文件名
 shell命令行的扩展与替换-路径名替换

通配符

       用于匹配的字符称为通配符,例如:

* 匹配任意字符或字符串,包括空字符串

? 匹配任意一个字符

[...]匹配方括号中列出的任何单字符

       如:

ls /dev/ttyS*

ls test0?.txt

ls test[0-2].txt

ls test[012][0-9].txt

 shell命令行的扩展与替换-命令替换

命令替换

              命令替换允许一个命令的输出来替换这个命令本身。命令替换在一个命令这样封装的时候发生:

       $(command) `command` (老式语法)

       如:

       date=$(date)

       echo $date

shell命令行的扩展与替换-单引号与双引号

单引号(‘’)用于保持在引号内的每个字符的字面值。

双引号保持引号内的所有字符的字面值,除了$``\

算术替换用于算术计算:$(())中的shell变量取值将换成整数,如:               var=45               echo $(($var+3))注意只能用+-*/和(),并且只能做整数计算。
 shell测试语句条件测试:test或者[ ]可以用test或者[ ]测试一个条件是否成立,如果测试结果为真,则该命令退出状态为0,如果为假,状态为1
通过echo  $?来输出结果文件测试

格式:test option file 或者[ option file ]

-b file            
测试文件是否为块设备文件

-c file            
测试文件是否为字符设备文件

-d file            
测试文件是否为目录

-f  file              测试文件是否为普通文件

-e file                
测试文件是否存在

-r file                
测试文件是否可读

-s file                
测试文件是否非空

-w file              
测试文件是否为可写

-x file               
测试文件是否可执行      
 
示例:
test  -d /home/jerry

       
echo $?
结果为0,说明jerry是一个目录
 -a:逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边至少一边为真,结果为真,否则为假。
! :逻辑否,条件为假,结果为真。
示例:
    
判断主目录中的文件install.log 是否同时具有写入和执行的权限。         
    
test -w install.log -a  -x install.log
       
      
echo $?
整数比较
格式:test  int1  operator  int2
      
-eq                         
数值相等。
        -ne                          数值不相等。
        -gt                           第一个数大于第二个数。
        -lt                            第一个数小于第二个数。
      
-le                          
第一个数小于等于第二个数。
      
-ge                         
第一个数大于等于第二个数。
 示例:        test  8  -eq  3      
                   
echo $?

字符串测试

格式:test option string或者[option string]       
               
=
两个字符串相等。           
              
!=
两个字符串不等。             
              
-z
测试字符串是空字符串。      
                
-n
测试字符串是非空字符串。
               s1 = s2                  
相等

               s1 != s2                  s1
s2不同

               s1 < s2                    s1
ASCIIs2

               s1 > s2                 s1
ASCIIs2
If
语句
i f语句测试条件,测试条件返回真( 0)或假(1)后,可相应执行一系列语句。    
  
简单的if语句是:  
    
i f
条件 
     
then
命令   
   
f i
        注意:使用i f语句时,必须将t h e n部分放在新行,否则会产生错误。如果要不分行,必须使用命令分隔符。
现在简单
i f语句变为:
        if  条件;t h e n       
               
命令     
       
f i

i f
语句其格式为: 
     
if
条件1         
             
then

       命令
1   
   
elif
条件2    
                  
then

          命令
2 
     
else
          
            
命令3
       
f i

case
语句
c a s e语句为多选择语句。
可以用
c a s e语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。c a s e语句格式如下:
        case    i n
      
模式1
            命令1
      
    . . .

       
   
;;
      
模式2
       
   
命令2
      
     . . .
  
    
   
;;
        e s a c
  取值后面必须为单词
i n,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至;;
  取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号
*捕获该值,再接受其他输入。
  模式部分可能包括元字符,与在命令行文件扩展名例子中使用过的匹配模式类型相同,
即:

*
任意字符。
任意单字符。
[..] 类或范围中任意字符。
 for循环
f o r
循环一般格式为:
        for  变量名  i n  列表
       
d o

      
   
命令1
            命令2
      
d o n e

  当变量值在列表里,
f o r循环即执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的s h e l l命令和语句。变量名为任何单词。
 
i n列表用法是可选的,如果不用它, f o r循环使用命令行的位置参数。
 
i n列表可以包含替换、字符串和文件名,下面看一些例子。
#!/bin/bash
   
for char in a  b c d e

  
do
 
        
echo $char

   
done

或者
   
#!/bin/bash

  
#example:  for cycle

   
for str

  
do

         
echo $str

  
done

 
./example.sh  a b c d e

while循环
 
w h i l e循环用于不断执行一系列命令,也用于从输入文件中读取数据,其格式为:
    while 命令
   
d o

  
   
命令1 
  
   
命令2 
 
    . . .
   
d o n e
 
阅读(3758) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~