Chinaunix首页 | 论坛 | 博客
  • 博客访问: 718312
  • 博文数量: 67
  • 博客积分: 994
  • 博客等级: 准尉
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-03 14:10
文章分类
文章存档

2014年(11)

2013年(14)

2012年(14)

2011年(28)

分类: LINUX

2013-06-24 11:51:40


这里主要介绍两部分:用户输入操作和数据显示。
1.用户输入操作。
        脚本里面用户的输入操作是通过键盘实现输入操作,最容易想起的命令就是read命令,使用read命令之后就提示用户可以在终端输入数据了。这里使用 read是主要配合使用几个主要的参数:-p,指定了一个提示信息;-t ,使用计数器,限制用户输入变量或消息的时间,如果超时则返回一个非零状态;-s,在输入时不在终端显示要输入的数据,实际上是显示数据的,只是该命令将 文本颜色设置成与背景相同的颜色。
        介绍完基本输入接下来就要说明命令行参数,简单的说就是在执行脚本文件时所带的参数,第一个参数使用$1表示,依次类推,当参数大于9时就要使用${10}这样的形式表示。既然有命令行参数,就涉及到如何显示这些参数、参数计数以及参数和选项分离。
1.1 参数的显示
         实现参数显示主要有两个符号实现:$*、$@。这两个实现是有区别的。后面实现之后大家看结果自行总结
1.2 参数计数
        实现参数计数的命令为$#.
1.3 参数和选项分离操作
        有时候在执行脚本的时候既需要使用选项又需要使用参数,怎么将选项和参数分开?脚本中给出了一个特殊符号--做为区分参数和选项的标志。
         上面讲了这么多现在就给出一个脚本实现上面的功能。
#!/bin/bash
# this is a simple example about how to handle user input

echo 1:show parameter
echo 2:count parameter
echo 3:separation para and options

read -p "input a name :"
if [ $name="add" ]
then
    total=$[ $5+$6 ]
elif [ $name="mul" ]
then
    total=$[ $7*$8 ]
fi

echo the result is $total
echo the counts of parameter are $#

while [ -n "$1" ]
do
     case "$1" in
    -a) echo "this is -a option" ;;
    -b) echo "this is -b option" ;;
    -c) echo "thsi is -c option" ;;
    --) shift
        break;;
     *) echo option over;;
     esac
     shift
done

echo use $@ show para:
count=1
for para in "$@"
do
    echo para $count:$para
    count=$[ $count+1 ]
done
 
echo use $* show para:
count1=1
for para in "$*"
do
    echo para $count1:$para
    count1=$[ $count1+1 ]
done
结果:

2 数据显示
      在学习操作系统时,对文件的一系列操作都用到了文件描述符,系统里每个文件描述符都有一个对应的id,比如0表示标准输入、1表示标准输出、2表示标准错误输出,结合上述文件描述符和重定向技术实现消息的重定向。
      一般对于标准输入来说,需要通过键盘实现输入,当结合重定向技术之后,可以将一个文件的内容作为输入。这里面主要掌握exec命令就可以了。
     一般进行重定向输出时有时候数据很多,不能每个echo都重定向输出,这样太麻烦,可以使用exec一次性全部重定向所有输出。
 1 #!/bin/bash
  2 #redirecting
  3
  4 exec &> test3
  5
  6 echo hello there
  7 echo i love life
  8
  9 ls -al tesw test5 &>> test3
其中&>表示将错误输出和标准输出同时显示,一般情况下错误消息是和普通脚本信息分开显示的。





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