我想确保我的bash脚本可以正确检测用户的输入参数。具体来说,用户只能将1或2或3传递给脚本,否则脚本将被终止。我写了以下代码:
#!/bin/bash
for args in $@
do
echo $args
done
if [ "$#" != 1 ] && [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
exit 1
fi
此脚本只能在用户未提供任何输入时捕获,但无法检查用户是否确实输入了数字1而不是其他值。
顺便说一下,我不知道如何表达"输入参数可以接受数字1或2或3"。
答案 0 :(得分:1)
if(country.selectedItem.Equals("US") and country.selectedItem is unchecked....)) {
.......
}
是一个整数,因此您必须使用整数比较。例如,您可以说:
$#
要检查参数是1,2或3,您可以使用此正则表达式(请参阅something related):
if [ "$#" -ne 1 ]; then
echo "illegal number of parameters"
exit 1
fi
要表达“输入参数可以接受数字1或2或3”,我会举例说“我们可以接受参数为1,2或3”。
答案 1 :(得分:0)
首先,您只需执行以下操作即可检测字符串是空还是空:
if [ -z "$1" ]
then
echo "Argument $1 contains nothing"
fi
我想说的是你的第一步,并允许你过滤掉没有内容的args。
接下来,您很可能需要对1美元,2美元和1美元进行一些比较工作。 $ 3'/ P>
我只是检查一下,然后马上回来。
只需要找到我的一个脚本并检查一下......: - )
过去我处理过parms检查的一种方法如下:
#!/bin/sh
while [ $# -gt 0 ] || [ "$#" -le 4 ]; do
case "$1" in
*[!1-9]*) echo "Text: $1";;
*) echo "Number: $1"
esac
case "$2" in
*[!1-9]*) echo "Text: $2";;
*) echo "Number: $2"
esac
case "$3" in
*[!1-9]*) echo "Text: $3";;
*) echo "Number: $3"
esac
shift
done
基本上是一个简单的正则表达式,如果我有超过0个参数或少于4个参数,那么我允许它通过case语句,然后检查每个参数的内容。
这个只有一个回声,但你可以轻松设置一些标志,然后根据这些标志决定如何继续。
但是,对于简单范围检查,您可能只想使用类似于以下内容的单个衬垫:
if [[ $# -gt 0 && $# -lt 4 ]]; then echo "Correct number of parameters"; fi
再次设置标志以便稍后使用而不是回显结果。
答案 2 :(得分:0)
我认为你的意思是输入只能是1,2或3,所以使用case语句是最好的方法。 $ 1是存储参数的变量,如果它等于1,则执行块中对应于值1的代码,依此类推。
case "$1" in
1) ...
;;
2) ...
;;
3) ...
;;
*) echo "Invalid argument"
;;
esac