为了账号安全,请及时绑定邮箱和手机立即绑定

我自己写的Shell脚本,也想通过这种方式传参,怎么处理呢?

我自己写的Shell脚本,也想通过这种方式传参,怎么处理呢?

慕哥9229398 2023-04-14 18:14:58
Linux的参数好多都是可以通过参数名空格参数值这种方式传参的,比如find . -name *.php貌似Shell不提供这种方式,只能通过 $数字 的方式
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

你可以自行解析$@参数实现解析。但是实际情况比这复杂。比如说,如果我需要一个-name test的带参数选项,直接遍历$@的代码就很复杂了。

正常一点的解决方案是用bash的built-in getopts或者命令getopt(注意这俩名字不一样)。

我把里面的样例代码贴这里。你可以将这部分代码保存成脚本然后执行之测试效果

# getopts :s:h表示这个命令接受2个带参数选项,分别是-h和-swhile getopts :s:h optdo  
    case $opt in
        s)  
            echo "-s=$OPTARG"
            ;;
        :)            echo "-$OPTARG needs an argument"
            ;;
        h)  
            echo "-h is set"
            ;;
        *)  
            echo "-$opt not recognized"
            ;;    esacdone


查看完整回答
反对 回复 2023-04-17
?
DIEA

TA贡献1820条经验 获得超2个赞

可以遍历一下你获取到的参数列表$@,具体里面怎么写就看你,比如最简单的:

#!/bin/bashfunction getName() {
	found=0;	for item in $@ ; do
		if [[ $found == 1 ]]; then
			echo $item;
			found=0;			break;		fi
		
		if [[ "$item" == "-name" ]]; then
			found=1;		fi
	done}

getName $@


查看完整回答
反对 回复 2023-04-17
  • 2 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信