SHELL脚本语言基础(2)

Getopts
传统的 UNIX 和 Linux 命令将一些传递的参数看作选项。过去,这些参数是单个的字符开关,与其他参数的区别在于拥有一个前导的连字符或负号。为方便起见,若干个选项可以合并到 ls -lrt 命令中,它提供了一个按修改时间(-t 选项)反向(-r 选项)排序的长(-l 选项)目录清单。
您可以对 shell 脚本使用同样的技术,getopts 内置命令可以简化您的任务。要查看此命令的工作原理,可以考虑如下所示的示例脚本 testopt.sh

OPTIND自动进1 多了一个空参数
如果短横线后面一次性跟了两个参数值,下一个需要处理的参数是短横线后的第二个,所以此时OPTIND为1
OPTARG

获取参数与脚本内参数进行匹配

Getopts 执行短横线后的语句
例1-4

#!/bin/bash
while getopts "st" opname
#获取短横线后的参数
do
case "$opname" in
  s)
        echo "Hello sara"
        ;;
#为s时输出Hello sara
  t)
        echo "Hello tom"
        ;;
#为t时输出Hello tom
  *)
        echo $"Usage: $0 -s|-t“
#为其他参数是输出此参数不合法 不是-s或-t
esac
done

在这里插入图片描述

传统的 UNIX 和 Linux 命令将一些传递的参数看作选项。过去,这些参数是单个的字符开关,与其他参数的区别在于拥有一个前导的连字符或负号。为方便起见,若干个选项可以合并到 ls -lrt 命令中,它提供了一个按修改时间(-t 选项)反向(-r 选项)排序的长(-l 选项)目录清单。
可以对 shell 脚本使用同样的技术,getopts 内置命令可以简化任务。

getopts 命令使用了两个预先确定的变量OPTIND和OPTARG。OPTIND:这个表示命令行的下一个选项或参数的索引(文件名不算选项或参数)。OPTARG:表示将选项后面的参数(或者描述信息DESCPRITION)保存在这个变量当中。

例:testopts,sh

#!/bin/bash
#输出参数索引
echo "OPTIND starts at $OPTIND"
#接收参数,前导冒号告诉getops保持静默并抑制正常的错误消息,之后脚本将提供他自己的错误处理
while getopts ":pq:" optname
	do
	case "optname" in
	"p")
	echo "Option $optname is specified"
	;;
	#如果参数为p则输出 参数P指定
	"q")
	echo "Option $optname has value $OPTARG"
	;;
	#如果参数为q则输出 参数q有值为
	"?")
	echo "Unknown option $OPTARG"
	;;
	#包含问号,输出未知操作,并将描述信息写入参数
	":")
	echo "No argument value for option $OPTARG"
	;;
	#该选项无参数值
	*)
	echo "Unknown error while processing option"
	;;
	#错误参数
	esac
	echo "OPTIND is now $OPTIND"
done

在这里插入图片描述

此例中的前导冒号告诉 getopts 保持静默(silent)并抑制正常的错误消息,因为此脚本将提供它自己的错误处理。

此例中的第二个参数opname是一个变量名,该变量将接收找到选项的名称。如果预期某optname个选项应该拥有一个值,而且目前存在该值,则会把该值放入 OPTARG 变量中。在静默模式下,可能出现以下两种错误情况。

如果发现不能识别的选项,则 optname 将包含一个 ? 而 OPTARG 将包含该未知选项。
如果发现一个选项需要值,但是找不到这个值,则 optname 将包含一个 : 而 OPTARG 将包含丢失参数的选项的名称。
如果不是在静默模式,则这些错误将导致一条诊断错误消息而 OPTARG 不会被设置。脚本可能在 optname 中使用 ? 或 : 值来检测错误(也可能处理错误)

对于一个基本的Shell程序来说,应该拥有以下基本元素:
 第1行的“#!/bin/bash”。
 注释:说明某些代码的功能。
 可执行语句:实现程序的功能。

例 :第一个Shell程序 helloshell.sh

#!/bin/bash
#输出字符串
echo "Hello  Shell!"

除了/bash命令解释器外,还可指定
More脚本解释器
在PHP脚本文件中指定PHP语言的解释器,然后执行文件中的PHP代码。

注释:
#单行注释
:<<block
BLOCK 多行注释

执行:
在Linux中,如果要执行某个Shell脚本,用户可以通过3种方式来实现。这3种方式分别为:
 授予用户执行该脚本文件的权限,使得该脚本能够直接执行。
 通过调用Shell脚本解释器来执行。
 通过source命令来执行。
其中:source命令是一个Shell内部命令,其功能是读取指定的Shell程序文件,并且依次执行其中的所有的语句。该命令与前面2种方式的区别在于只是简单地读取脚本里面的语句,并且依次在当前的Shell里面执行,并没有创建新的子Shell进程。脚本里面所创建的变量都会保存到当前的Shell里面

返回状态:
在UNIX或者Linux中,每个命令都会返回一个退出状态码。退出状态码是一个整数,其有效范围为0~255。通常情况下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解释成一个错误码。行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功。
Shell脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的最后的命令会决定退出状态码。另外,用户也可以在脚本中使用exit语句将指定的退出状态码传递给Shell。

例:1-9

#!/bin/bash
echo "hello world"
#退出状态为0, 因为命令执行成功.  
echo $?    
#无效命令.
abc
#非零的退出状态, 因为命令执行失败.
echo $?    
echo
#返回120退出状态给shell.  
exit 120

Exit 128 语句 指定返回状态码
简单命令堆积,不用写解释器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值