我的unix脚本出了什么问题

时间:2014-02-10 02:42:51

标签: bash shell unix

#!/bin/bash

while echo -n "Player's name?"
    read name
    [ $name != 'ZZZ' ]

do
searchresult=$(grep [$name] playername)
if [ $searchresult=0 ]

then

    echo -n "if See target (T/t) or team name (M/m)?"

    read team
    read target

    while [ [ $target!=T ] || [ $team!=M ] ]

        do

        echo "Please enter only T or M."
        done

        if $target=T
        then
            grep [ $name ] targetselected

        else

            grep [ $name ] teamselected

        fi

else

echo 'no such player'

fi

done
echo You are now exited search

错误消息 - 第10行:[:参数太多,这是什么意思?

2 个答案:

答案 0 :(得分:0)

不确定您指向的已发布代码中的哪一行,但我发现您发布的代码存在一些问题

while [ [ $target!=T ] || [ $team!=M ] ]应为

while [ $target!="T" ] || [ $team!="M" ]

此外,if $target=T因此应为if $target="T"

答案 1 :(得分:0)

这两行:

searchresult=$(grep [$name] playername)
if [ $searchresult=0 ]

非常错误。如果您要确定grep是否成功,最好这样做:

if grep -q "$name" playername; then ...

将grep放入$()并分配给searchresult,您要比较grep的输出,而不是检查其退出状态。并且第二行=周围缺少的空格非常错误。假设searchresult是一个不包含空格且只包含字母数字字符的字符串,则行if [ $searchresult=0 ]将始终求值为true,因为字符串“$ searchresult = 0”始终为非空。 (如果searchresult是空字符串,那么$searchresult=0是非空的字符串=0,因此测试成功。)您打算测试该字符串是否为空是不太可能的。您看到的确切错误表明grep正在为包含空格的searchresult分配值。在这种情况下,[ $searchresult=0 ]$searchresult周围没有双引号)被[解析为多个参数(在$searchresult中的空格上拆分),错误告诉你有太多的争论。