Chinaunix首页 | 论坛 | 博客
  • 博客访问: 275393
  • 博文数量: 68
  • 博客积分: 125
  • 博客等级: 入伍新兵
  • 技术积分: 606
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:35
文章分类

全部博文(68)

文章存档

2014年(5)

2013年(59)

2012年(4)

分类: LINUX

2013-01-04 16:31:07

注意事项:
       1.命令的执行是从上而下,从左而右地分析与执行

       2.命令、参数见的多个空白都会被忽略掉

       3.空白行也将会被忽略掉,tab键同

       4.如果读取到一个enter键(CR),就尝试执行该行命令

       5.如一行内容太多,则可以使用"\[enter]“来扩展至下一行

       6."#"作为批注,任何加在#后面的数据将全部被视为批注文字而被忽略(该行内)
如此以来,script内的命令会被一行一行的执行。

shell script 执行
   1.直接命令执行
   shell.sh需要有可读和可执行的(rx)的权限
   root#shell.sh

   2.以bash进程来执行
   root#bash shell.sh
or
   root#sh shell.sh

   3. source命令
   root# source shell.sh

前两种方法都是在当前shell 的子shell中执行的,shell.sh中设置的自定义变量在当前shell中不可用,而source命令是在当前shell中执行shell.sh脚本

script模板

     #!/bin/bash                    ->指定script使用的shell名称
     #Program:                      ->程序内容的说明,内容与功能、版本信息、作者与联系方式、建立日期、历史记录等
     #.......
     #......                                 
     #History                         
     主要环境变量的声明,
  

      script
      告知执行结果

判断式
   
      test 命令

      root# test -e /file

      关于某个文件名的“文件类型”判断,

             -e:该文件名是否存在

             -f:该文件名是否存在且为文件(file)

             -d:该文件名是否存在且为目录(directory)

             -b:该文件名是否存在且为一个block device设备

      关于文件的权限检测,
       
             -r:检测该文件名是否存在“可读”的权限

             -w:检测该文件名是否存在“可写”的权限

             -x:检测该文件名是否存在“可执行”的权限

       两个文件之间的比较
               test file1 -nt file2

            -nt(newer than):判断file1是否比file2新

            -ot:(older than):判断file1是否比file2旧

            -ef:判断file1,file2是否为同一文件,可用在判断hard link 上,主要意义在于判定两个文件是否指向同一个inode

      两个整数之间的比较 test n1 -eq n2

            -eq:两数值相等

            -ne:两数值不等(not equal)

            -gt:n1 大于n2(greater than)

            -lt:n1小于n2(less than)

            -ge:n1大于等于n2(greater than or equal)

            -le:n1小于等于n2(less than or equal)

     判定字符串的数据

           test -z string         判定字符串是否为0,若string为空字符串,则为true

           test -n string          判定字符串是否非为0,若string为空字符串,则为false -n可省略

      多重条件判定    test -r filename -a -x filename

            -a:两个条件同时成立
 
            -o:任何一个条件成立

            !:取反

    test -z filename == [ ”空格“-z”空格“filename"空格“]

    []内的每个组件都需要有空格键来分割

    []内的变量,最好用双引号括起来

    []内的常量,最好以单或双引号括起来

shell script 的默认变量

   root#/path/scriptname  opt1 opt2 opt3
                      $0                     $1     $2    $3

   $#: 参数个数

   $@:代表命令后接所有参数

   $*:代表“$1c$2c$3c$4...",其中c为分割字符,默认为空格键

  shift 造成参数变量号码偏移

   shift n   表示参数左移n位

条件判断式:

一个判断式
 
    if [ 条件判断式 ]; then
     script
    fi

&& 代表 and

|| 代表or

 if [ 条件判断式 ];then
   script
 else
     script
fi

if []; then
  script
elif []
  script
elif
   script
....
else
   script
fi

利用case...... esac 判断

   case $variable in
           "varibale1")
                   script
             ;;
            "variable2“)
                  script
             ;;
            *)                  ->代表所有其他值(except variable1, variable2, variable3....)
            exit 1
             ;;
     esac

函数 function
   
       function fname() {
       }

函数调用格式:
         script
         fname
         script...

   function内置变量
         fname opt1 opt2 opt3
                       $1     $2     $3
    函数fname内部可以使用$1, $2, $3 对调用时使用的变量进行处理

   循环(loop)

   不定循环

   1. while do done

    while [ condition ]
    do
             script
     done
    当condition为真时进行循环,当contidion为假时,停止循环

   2.  until do done
   until [ condition ]
   do
          script
  done
   当contidion条件成立时,停止循环,否则继续进行循环的程序段

 for ... do... done(固定循环,已经知道进行几次循环)

     for var in con1 con2 con3 .....
     do
     
             script

      done

  第1次循环时, var = con1;
  第2次循环时,var= con2;
  ......

  for ... do ... done的数值处理

    for((初始值;限制值;执行步长))
    do
             script
    done

    初始值:某个变量在循环当中的初始值,类似i=1;
     限制值:当变量的值在这个限制值的范围内,就继续循环,如i<100;
    执行步长:每做一次循环变量的变化值,如i=i+1;

 shell script 的追踪与调试

      root#sh/bash [-nvx] shell.sh

     -n : 不执行shell.sh,只检查语法问题

     -v:在执行shell.sh前,先将shell.sh输出到屏幕上

     -x:将使用到的script内容输出到屏幕上
阅读(1005) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~