您的位置:首页 > 其它

第4章 处理用户输入与显示数据------------(读取参数、读取程序名称、测试参数)

2017-03-14 00:00 633 查看

第4章 处理用户输入与显示数据

有时候编写的脚本需要能够与运行脚本的人员进行交互。bash shell提供了一些不同的方法从用户处获取数据,这些方法命令参数(添加在命令后面的数据值)、命令行选项(修改命令行为的单字符值)和直接读取键盘输入。

脚本显示信息方式有两种:将数据显示到监视器上、将数据重定向到文件里

4.1命令行参数与特殊的参数变量

向shell脚本传递数据的最基本方式是使用命令行参数。使用命令行参数可以在执行脚本时向命令行中添加数值。

4.1.1 读取参数

bashshell将在命令行中输入的所有参数赋值给一些特殊变量,这些变量称为位置参数。其中还包括shell执行的程序的名称。位置参数通过标准数字表示,其中$0为程序名称,$1为第一个参数,$2为第二个参数,以此类推,直到$9为第九个参数

可以在shell脚本中像使用其他变量一样使用变量$1。shell脚本自动将命令行参数赋值给变量$1。无需用户干预。如果需要输入更多命令行参数,那么必须在命令行中使用空格分隔每个参数。shell将每个参数赋值给适当的变量,在命令行中也可以使用文本字符串

记住,每个参数都是通过空格分隔,所以shell会将空格解析为两个值的分隔标志。要想在参数值中包含空格,就必须使用引号(单引号和双引号均可)。引号不作为数据的一部分,它们只是界定数据的起始和结束。

如果脚本需要的命令行参数多余9个,那么可以继续在命令行中添加命令行参数,但是变量名称会稍有变化。在第九个变量之后,必须使用大括号将变量括起来,如${10}。通过这一方法,可以根据需要为脚本添加任意数量的命令行参数。

读取参数的操作实例如下:

#!/bin/bash
#读取参数
echo "使用第1,2,3位置参数"
case $1 in
+ | -) [ $2 -ge $3 ] && echo "$2 $1 $3="$[ $2 $1 $3];;
*) echo "输入错误!";;
esac

echo "使用第4,5位置参数"
for(( i=1 ;i<=$4;i++ ))
do
echo "循环次数:$4"
echo "依次相乘:"$[ $i*$5 ]
done

echo "使用第6位置参数"
[ $6 == hello ] && echo $6" world!"

echo "使用第7,8,9位置参数"
if [ $[ $7 * $8 ] -eq 100 ]
then
echo "$7 * $8="$[ $7 * $8 ]
else
echo $9
fi

echo "使用大于9的位置参数"
[ ${10} -gt ${11} ] && echo "${10} - ${11}="$[ ${10}-${11} ]




4.1.2 读取程序名称

使用参数$0可以确定shell从命令行启动的程序的名称。在编写具有多个功能的工具时,这种方法非常方便。传递给变量$0的字符串实际上是程序的完整路径,而不仅仅是程序的名称。basename命令只返回程序名称,不带路径。可以使用这个方法编写基于使用的脚本的名称来执行不同功能的脚本。

读取程序名称实例:

#!/bin/bash

#读取程序名实例
echo "输入文件名:$0"
file=`basename $0`
if [ $file = 'addem' ]
then
total=$[ $1 + $2 ]
elif [ $file = 'multem' ]
then
total=$[ $1 * $2 ]
fi
echo "计算结果如下:"$total




4.1.3 测试参数

在shell脚本中使用命令行参数时要非常小心。如果执行脚本时缺少参数,会产生糟糕的结果。当脚本认为参数变量中包含数据,但实际上其中并没有数据时,极有可能生成脚本错误小心。这种编写脚本方法很不好。好的方法是对参数进行检查来保证使用参数确实存在数据。在test命令中使用-n参数来检查命令行参数是否存在数据。

#!/bin/bash
#使用-n参数来检查命令行参数是否存在数据
if [ -n "$1" ]
then
echo "Hello,$1"
else
echo "Don't exists $1"
fi


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐