1

私は自分自身にbashスクリプトを教える必要があります。私はこの電子ブックを読んでいて、次のコードがあります。

#!/bin/bash
# hello.sh
# This is my first shell script!

declare -rx SCRIPT="hello.sh"
declare -rx who="/usr/bin/who"
declare -rx sync="/bin/sync"
declare -rx wc="/usr/bin/wc"

# sanity checks

if test -z "$BASH" ; then
    printf "$SCRIPT:$LINENO: please run this script with the BASH shell\n" >&2
    exit 192
fi

if test ! -x "$who" ; then
    printf "$SCRIPT:$LINENO: The command $who is not available - aborting\n" >&2
    exit 192
fi

if test ! -x "$sync" ; then
    printf "$SCRIPT:$LINENO: the command $sync is not available - aborting\n">&2
    exit 192
fi

if test ! -x "$wc" ; then
   printf "$SCRIPT:$LINENO: the command $wc is not available - aborting\n" >&2
   exit 192
fi

USERS = `$who | $wc -l`
if [ $USERS -eq 0 ] ; then
    $sync
fi

exit 0

実行すると、次のエラーが発生します。

hello.sh: line 32: USERS: command not found
hello.sh: line 33: [: -eq: unary operator expected

何が間違っているのかよくわかりません。そのような方法でUSERSをコマンドラインの出力に割り当てることは許可されていませんか?コマンドラインでその行を実行すると、それも機能しません。何か案は?

ありがとう

4

3 に答える 3

5

割り当ての前後のスペースを削除します=

USERS=`$who | $wc -l`

またはUSERS、2 つのパラメータ=と `%who | %who | $wc -l`

于 2012-05-17T01:26:38.923 に答える
4

交換

USERS = `$who | $wc -l`

USERS=`$who | $wc -l`
于 2012-05-17T01:24:54.747 に答える
2

Bash(実際には多くのシェル)では、変数名とシンボルの間にスペースを入れることはできません=

この場合、あなたは書く必要があります

USERS=`command`  

また

USERS=$(command)

変数は、C++マクロとして機能する場合があります。変数USERSが空で、次のように入力した場合:

if [ $USERS -eq 0 ] ; then 

次のように解釈されます

if [ -eq 0 ] ; then 

-eqは単項演算子ではありません。それを正しくするには、次のように書く必要があります。

if [ "$USERS" -eq 0 ] ; then 

解釈される

if [ "" -eq 0 ] ; then 
于 2012-05-17T01:29:38.373 に答える