1.我正在尝试验证传递给shell脚本的参数数量,但我无法找到简单的方法

时间:2014-03-01 14:08:03

标签: jquery shell validation jquery-mobile mobile

我正在尝试根据以下要求为两个不同的脚本编写验证,

  1. 我正在尝试验证是否所有必需参数都传递给shell脚本,但我无法找到正确的方法,因为getopts不支持长变量。
  2. members.sh -name [name] -age [age] -sex [m/f] -add [address] -city [city] -country [country] -pincode [pincode] - mobile [mobile no] -email [email id]

    我想传递上述参数,mobileemail是可选的剩余必填选项,agepincode应该只是数字,如果我们提供移动设备不,那也应该是整数。

    我如何验证以上内容?感谢您的帮助

    1. 对于另一个脚本,我需要在几个中只允许一个选项,我该如何实现呢。
    2. 示例:

      listhistory.sh -all -name [name] -mobile [mobile no] .... -opt9 [data9]
      

      应使用-all-name [name]-mobile [mobile no]或9个参数内的任何其他参数调用上述脚本。

1 个答案:

答案 0 :(得分:0)

您可能需要稍微修改一下您的要求并使用以下脚本:

members.sh --name [name] --age [age] --sex [m / f] - add [address] --city [city] - mobile [mobile no] --email [email] ID]

如果你没问题,你可以考虑写一下:

#!/bin/sh

while getopts ":-:" arg
do
        case "${arg}" in
            -)
                 case "${OPTARG}" in
                        sex)
                            val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
                            echo "Parsing option: '--${OPTARG}', value: '${val}'" >&2;
                            sex=${val};
                           ;;
                        age)
                            val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
                            echo "Parsing option: '--${OPTARG}', value: '${val}'" >&2;
                            age=${val};
                            ;;
                        name)
                            val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
                            echo "Parsing option: '--${OPTARG}', value: '${val}'" >&2;
                            name=${val};
                            ;;
                        add)
                            val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
                            echo "Parsing option: '--${OPTARG}', value: '${val}'" >&2;
                            add=${val};
                            ;;
                        city)
                            val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
                            echo "Parsing option: '--${OPTARG}', value: '${val}'" >&2;
                            city=${val};
                            ;;
                        mobile)
                            val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
                            echo "Parsing option: '--${OPTARG}', value: '${val}'" >&2;
                            mobile=${val};
                            ;;
                        email)
                            val="${!OPTIND}"; OPTIND=$(( $OPTIND + 1 ))
                            echo "Parsing option: '--${OPTARG}', value: '${val}'" >&2;
                            email=${val};
                            ;;
                    esac;;
        esac
done


err=0;
if [ -z "${sex+xxx}" ]; then echo sex is not set at all; err=1;fi
if [ -z "${name+xxx}" ]; then echo name is not set at all;err=1; fi
if [ -z "${age+xxx}" ]; then echo age is not set at all; err=1; fi
if [ -z "${city+xxx}" ]; then echo city is not set at all; err=1; fi
if [ -z "${add+xxx}" ]; then echo add is not set at all; err=1; fi

if [[ $err -eq 1 ]]
then
        echo "incorrect usage"
        exit 1
else
        echo "All mandatory fields are set"
fi

PS:我没有涵盖所有必填字段。根据我的解决方案制作5个参数[名称,年龄,性别,城市和添加]作为强制性..而电话和电子邮件是可选参数..

代码只需输入并将它们存储在变量中..请编写自己的代码以便进一步验证。

示例输出:

$ sh n.sh --name nishant --age 24 --sex M --add "New Delhi India" --city Noida
Parsing option: '--name', value: 'nishant'
Parsing option: '--age', value: '24'
Parsing option: '--sex', value: 'M'
Parsing option: '--add', value: 'New Delhi India'
Parsing option: '--city', value: 'Noida'
All mandatory fields are set