Home  >  Q&A  >  body text

linux - 写一个脚本的时候报错,unary operator expected

源代码:
1 #!/bin/bash
2
3 if [ $# -ne 1 ];then
4 echo "wrong "
5 exit 1
6 fi
7
8 if [ id $1 ];then
9 echo "user infomation output"
10 sed '/$1/w A.txt' /etc/passwd
11
12 else
13 echo "no such user $1"
14 fi
脚本目的是 判断用户是否存在,存在就提取用户信息,然后添加到其他文件中。
运行后第8行报错 ./Info.sh: line 8: test: id: unary operator expected
百度一下,在8行if后面加一个[] if [[ id $1 ]];then.
但还是报错:
./Info.sh: line 8: conditional binary operator expected
./Info.sh: line 8: syntax error near `"$1"'
./Info.sh: line 8: `if [[ id "$1" ]];then'

本人新手。写脚本不久。电脑win10,wmware12,opensuse42.1 ,xshell5

PHP中文网PHP中文网2743 days ago878

reply all(3)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:04:33

    [[ -z $(id fengxsong) ]] && echo 'yes' || echo 'no'

    Similar to this, you did not save the output of id to the variable

    reply
    0
  • PHP中文网

    PHP中文网2017-04-17 15:04:33

    [] is actually test. You can view the test documentation through man test. Generally, if is used in combination with test, but this is not always the case. The mechanism of if is to determine the return value of the command. If the return value is 0, it is true, if it is not 0, it is false.

    It is recommended to read ABS, which has such an example:

    if grep hello /etc/passwd ; then
        echo contains hello
    else
        echo no hello found
    fi

    So it should be changed like this:

    #!/bin/bash
    
    if [ $# -ne 1 ];then
    echo "wrong "
    exit 1
    fi
    
    if id  ; then
    echo "user infomation output"
    sed '//w A.txt' /etc/passwd
    else
    echo "no such user "
    fi

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:04:33

    What is id? It’s not a built-in variable either! ?

    reply
    0
  • Cancelreply