Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96528
  • 博文数量: 23
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 205
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-12 12:22
文章分类

全部博文(23)

文章存档

2009年(3)

2008年(20)

我的朋友

分类:

2008-11-12 12:45:07

1 保留字符及其含义

 $      shell变量名的开始,如$var

   |    管道,将标准输出转到下一个命令的标准输入

   #    注释开始

   &    在后台执行一个进程

      匹配一个字符

   *    匹配0到多个字符(DOS不同,可在文件名中间使用,并且含.)

   $-   使用set及执行时传递给shell的标志位

   $!   最后一个子进程的进程号

   $#   传递给shell script的参数个数

   $*   传递给shell script的参数

   $@   所有参数,个别的用双引号括起来

   $?   上一个命令的返回代码

   $0   当前shell的名字

   $n    (n:1-) 位置参数

   $$   进程标识号(Process Identifier Number, PID)

   >file        输出重定向

           输入重定向

   `command`    命令替换,如    filename=`basename /usr/local/bin/tcsh`

   >>fiile      输出重定向,append

 

2 转义符及单引号:

        $echo "$HOME $PATH"

        /home/hbwork /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:


        $echo '$HOME $PATH'

        $HOME $PATH


        $echo \$HOME $PATH

        $HOME /opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/hbw

ork/bin

 

    其他:

        $dir=ls

        $$dir

        $alias dir ls

        $dir

 

        ls > filelist

        ls >> filelist

        wc -l < filelist

        wc -l filelist

        sleep 5; echo 5 seconds reaches; ls -l

        ps ax |egrep inetd

        find / -name core -exec rm {} \; &

        filename=`date "+%Y%m%d"`.log


3 数据测试

 a. 测试字符数据: shell变量通常民政部下均作为字符变量

        str1 = str2     二者相长,相同

        str1 != str2    不同

        -n string       string不为空(长度不为零)

        -z string       string为空

        string          string不为空

 

        :

                $ str1=abcd     #在含有空格时必须用引号括起来

                $ test $str1=abcd

                $ echo $?

                0

                $ str1="abcd "

                $ test $str1=abcd

                $ echo $?

                1

 b. 整数测试: testexpr相同,可以将字符型变量转换为整数进行操作,expr进行

         整数的算术运算,test则进行逻辑运算.

 

         表达式                 说明

         ---------------------------------------

         int1 -eq int2          相等?

         int1 -ne int2          不等?

         int1 -gt int2          int1 > int2 ?

         int1 -ge int2          int1 >= int2 ?

         int1 -lt int2          int1 < int2 ?

         int1 -le int2          int1 <= int2 ?

 

         :

                $ int1=1234

                $ int2=01234

                $ test $int1 -eq $int2

                $ echo $?

                0

 

      c. 文件测试:检查文件状态如存在及读写权限等

 

         -r filename     用户对文件filename有读权限?

         -w filename     用户对文件filename有写权限?

         -x filename     用户对文件filename有可执行权限?

         -f filename     文件filename为普通文件?

         -d filename     文件filename为目录?

         -c filename     文件filename为字符设备文件?

         -b filename     文件filename为块设备文件?

         -s filename     文件filename大小不为零?

         -t fnumb        与文件描述符fnumb(默认值为1)相关的设备是一个终端设备?

 

      d. 测试条件之否定,使用!

        :

                $ cat /dev/null > empty

                $ test -r empty

                $ echo $?

                0

                $ test -s empty

                1

                $ test ! -s empty

                $ echo $?

                0

      e. 测试条件之逻辑运算

        -a      And

        -o      Or

 

        : $ test -r empty -a -s empty

            $ echo $?

            1

      f. 进行test测试的标准方法

         因为test命令在 shell编程中占有很重要的地位,为了使shell能同其他编程语言

一样便于阅读和组织, Bourne Shell在使用test测试时使用了另一种方法:用方括号将

整个test测试括起来:

 

         $ int1=4

         $ [ $int1 -gt 2 ]

         $ echo $?

         0

 

         : 重写unload程序,使用test测试

         #!/bin/sh

         #unload - program to backup and remove files

         #syntax: unload directory

 

         #check arguments

         if [ $# -ne 1 ]

         then

                echo "usage: $0 directory"

                exit 1

         fi

 

         #check for valid directory name

         if [ ! -d "$1" ]

         then

                echo "$1 is not a directory"

                exit 2

         fi

 

         cd $1

 

         ls -a | cpio -o > /dev/rmt/0h

 

         if [ $? -eq 0 ]

         then

                rm -rf *

         else

                echo "A problem has occured in creating backup"

                echo "The directory will not be ereased"

                echo "Please check the backup device"

                exit 3

         fi

         # end of unload


阅读(1349) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:开博动机

给主人留下些什么吧!~~