Shell脚本检查字符串是否包含两个in-parameters

时间:2015-10-16 13:33:57

标签: linux bash shell if-statement

我正在Uni上介绍Linux和shell脚本课程。刚遇到一个问题。

我需要创建一个if语句来控制是否只有2个参数然后将它们写出来,如果没有返回警告字符串。

/*all cards*/
.card {...}

/*personalized cards*/
.card1 {...}
.card2 {...}
.....ect

这是我到目前为止所拥有的。我以为我可以让if语句在字符串中查找空格。

这是我在StackExchange上发表的第一篇文章。那么对那些StackExchangers的伙伴们问好了:=)

4 个答案:

答案 0 :(得分:0)

您可以使用$#来检查调用脚本的变量数量。然后使用$1$2来回显变量。

if [ $# -eq 2 ]
then
    echo "$1 $2"
fi

答案 1 :(得分:0)

要从标准输入读取两行并检查它们是否为空,您可以使用以下内容:

#!/bin/bash

echo "Please input two variables: "

read var1
read var2

if [ -n "$var1" -a -n "$var2" ]; then
  echo $var1
  echo $var2
else
  echo "More or less than two arguments"
fi

我修改了您的脚本以添加新变量(var2)并将var重命名为var1

然后,if被修改为检查两个变量都不为空,-n切换test(在shell上键入help test以获取更多信息) 。我没有使用命令test,而是使用了程序员更友好的[,其作用与test相同,但需要结尾]

答案 2 :(得分:0)

您可以做的是从输入中创建array,然后检查其长度。

#!/bin/bash

echo "Please input two variables: "
read var

myArray=($var)

if [ ${#myArray[@]} -eq 2 ];
then
        echo ${myArray[*]}
else
        echo "More or less than two arguments"
fi

bash数组中的值由空格分隔,因此当展开var时,每个单词都会被创建为新的数组索引。

答案 3 :(得分:0)

不要等到命令开始运行以获取输入之后,只需接受命令行参数。你的脚本看起来像:

if (( $# != 2 )); then
    echo "Need exactly two arguments"
    exit 1
fi

# Use $1 and $2 as needed

然后用

调用你的脚本
myscript hello world