cygw

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  5 随笔 :: 2 文章 :: 0 评论 :: 0 Trackbacks
Previous Next Contents

4    BASH 中的其他高级问题

  • BASH 中对返回值的处理

  • 用 BASH 设计简单用户界面

  • 在 BASH 中读取用户输入

  • 一些特殊的惯用法

  • BASH 程序的调试

  • 关于 BASH2

4.1    BASH 中对返回值的处理

无论是在 Shell 中对 BASH 脚本返回值的处理,还是在脚本中对函数返回值的处理,都是通过 "$?" 系统变量来获得。BASH 要求返回值必须为一个整数,不能用 return 语句返回字符串变量。


4.2    用 BASH 设计简单用户界面

BASH 中提供了一个小的语句格式,可以让程序快速的设计出一个字符界面的用户交互选择的菜单,该功能就是由 select 语句来实现的,select 语句的语法为:

select var in [list]
do
 statments use $var
done

上面的语法结构在执行后,BASH 会将 [list] 中的所有项加上数字列在屏幕上等待用户选择,在用户作出选择后,变量 $var 中就包含了那个被选中的字符串,然后就可以对该变量进行需要的操作了。我们可以从下面的例子中更直观的来理解这个功能:

#!/bin/bash 

OPTIONS="Hello Quit" 
select opt in $OPTIONS; do 
 if [ "$opt" = "Quit" ]; then 
  echo done 
  exit 
 elif [ "$opt" = "Hello" ]; then 
   echo Hello World 
  else 
   clear 
   echo bad option 
 fi 
done 

exit 0

大家可以试着执行上面的程序,看看是什么执行结果。

 

4.3    在 BASH 中读取用户输入

BASH 中通过 read 函数来实现读取用户输入的功能,如下面这段程序:

#!/bin/bash

echo Please enter your name
read NAME 
echo "Hi! $NAME !"

exit 0

上面这个脚本读取用户的输入,并回显在屏幕上。

另外 BASH 中还提供另外一种称为 here documents 的结构,可以将用户需要通过键盘输入的字符串改为从程序体中直接读入,如密码。下面的小程序演示了这个功能:

#!/bin/bash 

passwd="aka@tsinghua" 
ftp -n localhost <<FTPFTP
user anonymous $passwd 
binary 
bye 
FTPFTP 

exit 0

这个程序在用户需要通过键盘敲入一些字符时,通过程序内部的动作来模拟键盘输入。请注意 here documents 的基本结构为:

command <<SOMESPECIALSTRING
statments
...
SOMESPECIALSTRING

这里要求在需要键盘输入的命令后,直接加上 <<符号,然后跟上一个特别的字符串,在该串后按顺序输入本来应该由键盘输入的所有字符,在所有需要输入的字符都结束后,重复一遍前面 <<符号后的“特别的字符串”即表示该输入到此结束。

 

4.4 一些特殊的惯用法

在 BASH 中 () 一对括号一般被用于求取括号中表达式的值或命令的执行结果,如:(a=hello; echo $a) ,其作用相当于 `...` 。

: 有两个含义,一是表示空语句,有点类似于 C 语言中的单个 ";" 。表示该行是一个空命令,如果被用在 while/until 的头结构中,则表示值 0,会使循环一直进行下去,如下例:

while : 
do 
 operation-1 
 operation-2 
 ... 
 operation-n 
done

另外 : 还可以用于求取后面变量的值,比如:

#!/bin/bash 

: ${HOSTNAME?} {USER?} {MAIL?} 
echo $HOSTNAME 
echo $USER 
echo $MAIL 

exit 0

在 BASH 中 export 命令用于将系统变量输出到外层的 Shell 中了。

 

4.5 BASH 程序的调试

 bash -x bash-script 命令,可以查看一个出错的 BASH 脚本到底错在什么地方,可以帮助程序员找出脚本中的错误。

另外用 trap 语句可以在 BASH 脚本出错退出时打印出一些变量的值,以供程序员检查。trap 语句必须作为继 "#!/bin/bash" 后的第一句非注释代码,一般 trap 命令被写作: trap 'message $checkvar1 $checkvar2' EXIT 

 

4.6 关于 BASH2

使用 bash -version 命令可以看出当前你正在使用的 BASH 是什么版本,一般版本号为1.14或其他版本。而现在机器上一般还安装了一个版本号为 2.0 的 BASH 。该 BASH 也在 /bin 目录下。BASH2 提供了一些新功能,有兴趣的同叙可以自己去看相关资料,或直接 man bash2 即可。

 


 

posted on 2008-10-15 22:17 cygw 阅读(219) 评论(0)  编辑 收藏 引用 所属分类: Linux/Unix
只有注册用户登录后才能发表评论。