Chinaunix首页 | 论坛 | 博客
  • 博客访问: 314377
  • 博文数量: 28
  • 博客积分: 2156
  • 博客等级: 大尉
  • 技术积分: 232
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-02 15:31
文章分类

全部博文(28)

文章存档

2011年(7)

2010年(21)

分类: LINUX

2011-06-15 21:03:14


(1) chmod -R 777 /driver/
    
    参数: -R  --recursive
              change files and directories recursively
    
    即将/driver目录中的所有文件及其子目录全部设置权限为777.


(2)  [ -e /active/bin/boardrst ] && chmod 755 /active/bin/boardrst

   预备知识: (1) test命令,用来测试文件属性,比较字符串及比较数字。

                       接受各种不同的参数,控制它要进行哪一种测试。

            (2)  它产生的不是一般输出,而是可使用的退出状态。# echo $?

            (3)  test命令有另一种形式: [......],作用与test命令完全一样。

           eg: if test "$str1" = "str2"  |    if [ "$str1" = "$str2" ]
               then                      |    then
                   ......                |        ......
               fi                        |    fi
              ---------------------------------------------------------
         
           (4)  test表达式:有一元表达式(unary)和二元表达式(binary)

         -b file: file是块设备文件 | -c file: file是字符设备文件 | -d file: file是目录
 
         -e file: file存在 | -f file: file是一般文件 | -p file: file是命名管道(FIFO)

         -n string: string 是非NULL,或者说string字符串长度是否大于0,大于则为true.
         eg:             
                     【1】  if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
         如果环境变量BASH_ENV的值不是空字符串,则把它的值当作启动脚本的文件名,source这个脚本。
            【2】if [ -f ~/.bashrc ];
                   then . ~/.bashrc
                 fi
        这行脚本有三条命令,if [ -f ~/.bashrc ]是第一条,then . ~/.bashrc是第二条,fi是第三条。如果两条命令写在同一行则需要用;号隔开,一行只写一条命令就不需要写;号了,上面例子【1】有三条命令,都用;隔开了。
      
         (5)参数之间要用空格隔开
          eg: 
                  [ $VAR -gt 3 ],$VAR-gt3][命令的四个参数,它们之间必须用空格隔开。

(6) :是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。
eg:

if :; then echo "always true"; fi
   输出:always true

     ------------------------------------------------------------------------
   
      有了上面的基础,现在再看这行脚本就很easy了;首先,检查文件/active/bin/boardrst是否存在; 然后, 如果此文件存在,则将该文件的权限改为755.


(3)  export BCEM_DRIVER_IF="/driver/interface"

     export 命令可以将新变量添加到环境(environment)中, 环境是一个名称与值的简单列表,可供所有执行中的程序使用。这行脚本是把变量BCEM_DRIVER_IF添加到环境中,其值是/driver/interface目录。

(4) #mkdir /rmem && chmod 777 /rmem

    #开头的行都是注释;因此不起任何作用。这行脚本本来是要新建目录rmem,然后将其权限设为777.但是有一个例外,就是#!(称为Shebang),它表示该脚本使用后面指定的解释器/bin/sh解释执行。

(5) DIR=`pwd`
 
    这行脚本很简单,就是给变量DIR赋值为`pwd`。
    一、要注意的就是``; 这个反单引号的意思就是执行这个命令。所以这行脚本的意思就是执行pwd命令,然后将输出的值赋给DIR这个变量。
    二、关于变量,这里要注意,根据惯例,shell变量通常由全大写字母加下划线组成,有两种类型的Shell变量:环境变量和本地变量。
    环境变量可以从父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给fork出来的子进程。用printenv命令可以显示当前Shell进程的环境变量。
    而本地变量只存在于当前Shell进程,用set命令可以显示当前Shell进程中定义的所有变量(包括本地变量和环境变量)和函数。
    三、等号两边都不能有空格,否则会被Shell解释成命令和命令行参数。
    四、一个变量定义后仅存在于当前Shell进程,它是本地变量,用export命令可以把本地变量导出为环境变量,定义和导出环境变量通常可以一步完成,如(3)所示:export BCEM_DRIVER_IF="/driver/interface"。
    五、如果一个变量叫做VARNAME,用${VARNAME}可以表示它的值,在不引起歧义的情况下也可以用$VARNAME表示它的值。
    六、Shell变量的值都是字符串,比如我们定义VAR=45,其实VAR的值是字符串45而非整数。Shell变量不需要先定义后使用,如果对一个没有定义的变量取值,则值为空字符串。
   七、作为一种好的Shell编程习惯,应该总是把变量取值放在双引号之中
eg: 
 [ -d Desktop -a $VAR = 'abc' ], 如果$VAR变量事先没有定义,则被Shell展开为空字符串,会造成
测试条件的语法错误,(展开为[ -d Desktop -a = 'abc' ]);
而如果把变量放在双引号中 [ -d Desktop -a "$VAR" = 'abc' ],则(展开为[ -d Desktop -a "" = 'abc' ]
这样就不会报错。

(6)  source cpld_common.sh

     source或者.命令是Shell的内建命令,这种方式不会创建子Shell,而是直接在交互式Shell下逐行执行脚本中的命令。上面这行脚本就是直接在当前交互式shell下执行脚本cpld_common.sh。

(7)
START=$(($1))
END=$(($2))

LEN=$(($END-$START+1))

$(()) 用于算术计算,$(())中的Shell变量取值将转换成整数,$(())中只能用+-*/和()运算符,并且只能做整数运算。

例如:


[root@localhost shell]# VAR=45
[root@localhost shell]# echo $(($VAR+3))
48




(8) 双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:

  • $加变量名可以取变量的值 

  • [root@localhost shell]# echo "$SHELL"

  • /bin/bash

  • 反引号仍表示命令替换

  • [root@localhost shell]# echo "`date`"
    Thu Jun 16 20:35:41 CST 2011

  • \$表示$的字面值

  • \`表示`的字面值

  • \"表示"的字面值

  • \\表示\的字面值

  • 除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值


[root@localhost shell]# echo "\$"
$
[root@localhost shell]# echo "\'"
\




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