Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21400
  • 博文数量: 13
  • 博客积分: 325
  • 博客等级: 一等列兵
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-28 14:33
文章分类

全部博文(13)

文章存档

2012年(13)

分类: LINUX

2012-10-26 14:45:04

     Shell程序,通常称为Script,它其实只是一个纯文本文件,可以用vi(vim)等文本编辑器来编辑。Script中文译名为“脚本”。


1、Shell程序的基本组成
    
    Bash Shell程序的结构大体由:变量设定、内置命令、Shell语法、函数及其他命令行的程序所组成。下面演示一个简单的例子:

  1. #!/bin/bash
  2. #
  3. #Program:
  4. #   This program is show "Hello Word" in screen
  5. #History:
  6. #   2012/10/25   wsp    bash_version
  7. #
  8. echo "Hello Word"
  9. exit 0
    其中,行1以#!(称为sha-bang,它是sharp(#)、bang(!)的简称),表示要用/bin/bash 解译、执行这个Script文件。其他行以#开头者,则为注释(如这里的行2-行7),bash不予以处理。通常脚本的开头(或重要部分)加上一些必要的信息,是写脚本的好习惯。


2、设定执行权限
    
    Bash Script编写完后,在执行之前要先设定该Script的文件属性,使其具有可执行的权限。方法如下:

  1. chmod +x Script 文件名              #例如 chmod +x test.sh


3、执行Bash Script的方法
    
    Script具有可执行的权之后,就可以测试(执行)便好的程序了。若假设Script程序文件名为 test.sh,文件位置/root/tmp目录中。
    
     执行方法1:

  1. #切换到Script所在的目录(此时,称为工作目录)
  2. cd /root/tmp
  3. ./test.sh               #./的意思是,在现在这个工作目录下,执行test.sh
  4. #绝对路径方式
  5. /root/tmp/test.sh
     执行方法2:

  1. #直接使用bash或sh来执行Script
  2. cd /root/tmp
  3. sh tesh.sh          #sh其实是一个指向bash的soft link,不过若用sh,bash读取的启动配置文件
  4.                     #的方式将和旧版的Boune Shell相同,此时bash的功能...?

  5. #bash test.sh       #使用bash和sh方法执行时,可以不必事先设定Scipt的执行权限
     需要了解的是,上述两种执行方法在执行Script时,先行的Shell(称之为父Shell)会开始一个子Shell环境,此Script即是在这个子Shell中执行的。Script执行完毕后,此子Shell环境随即关闭,然后又回到现行的Shell之中。



4、Bash Script排错的基本方法
    
     排错方法一般是,先检查语法的正确性,接着追踪脚本的执行过程。(以test.sh为例)

    (4-1)检查Script的语法错误
     检查语法的指令:bash -n test.sh

    (4-2)追踪Script的执行(逻辑问题)

     把程序的执行过程全部显示出来,这称为“追踪Script”。追踪的语法为:bash -x test.sh。其中,-x是只bash要进行追踪之意。

     对代码的追踪也可以在脚本里面使用set。set是对要检测的代码打印,set -x 是开启,set +x是关闭,set -o是查看(xtrace),set去追踪一段代码中的显示情况。

  1. #!/bin/bash
  2. set -x
  3. echo "open the set trace"

    (4-2)强制变量一定要经过声明才能使用
     bash有一内置命令shopt,可以用来设定bash的功能选项。其中有一个选项和程序排错有关,如果启用此选项,可避免因打错变量名造成的程序执行错误。

  1. shopt -s -o nounset

    (4-4)在特定位置摆放echo指令
     如果追踪脚本之后还是无法发现错误之处的话,可在脚本中加入echo指令,例如echo显示某些变量的内容,或加入暂停的指令,如sleep 5,以观察输出画面。

  1. #!/bin/bash
  2. declare -i i=5
  3. if [[ i>3 ]]; then
  4.    i=1
  5.    echo "ok1"           #冗余输出,用以检查
  6. else
  7.    i=2
  8.    echo "ok2"           #冗余输出,用以检查
  9. fi

  10. exit 0

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