对于shell变量的循环

时间:2016-02-12 23:13:18

标签: bash unix scripting environment-variables

概述:

我正在尝试为需要多个参数的函数编写错误。

  • 示例:

    myfunction arg1 arg2 arg3 arg4

如果这些参数中的任何一个为null,我想给用户一个语法错误。

尝试:

我没有写过我试过的个别论据:

# Error Checking
for i in "{1.4}"
do
    # Check for null values of Bash variables:
    [[ -z $"$i" ]] && {
        printf "Syntax Error: Missing Operator see:\nmyfunction --help\n"
        exit
        }
done

- 和 -

# Error Checking
for i in ${1..4}
do
    # Check for null values of Bash variables:
    [[ -z $i ]] && {
        printf "Syntax Error: Missing Operator see:\nmyfunction --help\n"
        exit
        }
done

尝试语法检查:

enter image description here enter image description here

问题:

我想用for循环做什么呢?

非常感谢任何帮助。

提前致谢!

编辑:

在我开始搞乱报价和美元符号之前,还尝试了以下内容:

# Error Checking
for i in {1..4}
do
    [[ -z $"$i" ]] && {
        printf "Syntax Error: Missing Operator see:\nansi-color --help\n"
        exit
        }
done

3 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题:

die () { echo "$@" >&2; exit 1; }

myfn () {
        [[ $# == 4 ]] || die 'wrong number of args'

        for d in "$@"; do [[ $d ]] || die 'null arg'; done
}

myfn2 () {
        [[ $# == 4 ]] || die 'wrong number of args'

        for ((i = 1; i <= $#; i++)); do
                [[ ${!i} ]] || die 'null arg'
        done
}

"$@"可能更具惯用性。使用!的间接非常方便,但不常见。

答案 1 :(得分:0)

Caleb Adams指出我可以尝试这样的事情:

# Error Checking
[[ $# != 4 ]] && {
    printf "Syntax Error: Missing Operator see:\n\tansi-color --help\n"
    exit
    }

答案 2 :(得分:0)

就个人而言,我使用bash数组,然后检查其长度:

  args=($*)
  echo ${#args[*]}

但你可以这样做:

myfunc() { for i in {1..4}; do if [[ -z ${!i} ]]; then echo error at $i return -1 fi done ...do other stuff }