Shell脚本怎么通过 参数名 参数值 传参

发布于 2022-08-24 09:11:23 字数 141 浏览 32 评论 0

Linux的参数好多都是可以通过参数名空格参数值这种方式传参的,比如

find . -name *.php

我自己写的Shell脚本,也想通过这种方式传参,怎么处理呢?
貌似Shell不提供这种方式,只能通过 $数字 的方式

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦萦几度 2022-08-31 09:11:23

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

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

提问者如果翻墙的话可以去这里看我写的一篇日志 http://yegle.net/2011/04/21/parsing-n...

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

# getopts :s:h表示这个命令接受2个带参数选项,分别是-h和-s
while getopts :s:h opt
do  
    case $opt in
        s)  
            echo "-s=$OPTARG"
            ;;
        :)
            echo "-$OPTARG needs an argument"
            ;;
        h)  
            echo "-h is set"
            ;;
        *)  
            echo "-$opt not recognized"
            ;;
    esac
done
指尖上得阳光 2022-08-31 09:11:23

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

#!/bin/bash

function 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 $@
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文