我试图让这段代码接受用户给定的4值或" /"接受默认值。
#!/bin/bash
$komp=1
while [ ${#nbh[@]} -ne `expr 4 \* $komp` || ${nbh[0]} -ne "/" ]
do
echo "Enter 4 element or / to accept default"
read -a nbh
if [ ${#nbh[@]} -ne `expr 4 \* $komp` || ${nbh[0]} -ne "/" ]
then
echo "Wrong!!"
else
if [ nbh -eq "/" ]
then
declare -a nbh=('1' '0' '1' '1')
fi
fi
done
目前的情况是错误:
./mini.sh: line 3: [: missing `]'
./mini.sh: line 3: -ne: command not found
请帮助。
答案 0 :(得分:3)
根本问题是你不能用这种方式做一个布尔表达式。
while [ expr1 || expr2 ] # WRONG
不起作用,因为shell将其解析为两个命令:[ expr
(命令[
带有一个参数“expr1”)和expr2 ]
(命令expr2
with一个论点“]”)。这是一个错误,因为[
命令要求其最后一个参数是文字字符串]
。如果使用test
命令而不是[
,则更容易理解语法,但以下任何一种都可以使用:
while test expr1 || test expr2
while [ expr1 ] || [ expr2 ]
while [ expr1 -o expr2 ]
while test expr1 -o expr2
答案 1 :(得分:2)
#!/bin/bash
komp=1
default=(1 0 1 1)
prompt="Enter 4 elements or / to accept default: "
valid_input=0
while ((!valid_input)) && read -a nbh -p "$prompt"; do
if ((${#nbh[@]}==1)) && [[ ${nbh[0]} = / ]]; then
for ((i=0,nbh=();i<komp;++i)); do nbh+=( "${default[@]}" ); done
fi
if ((${#nbh[@]} != 4*komp)); then
echo "Wrong!!"
continue
fi
valid_input=1
done
if ((!valid_input)); then
echo >&2 "There was an error reading your input. Do you have a banana jammed in your keyboard?"
exit 1
fi
# Here, all is good
现在,您还要检查用户的输入是否为有效数字。
请阅读(并了解)the answer I provided to your other question。 (如果你真的这样做了,你就不会问这个问题。)