web-dev-qa-db-ja.com

予期しないオペレーターエラー

私のコードの何が問題になっていますか?

#!/bin/sh

LOOK_FOR="$1"

for i in `find $2 -name "*jar"`; do
  echo "Looking in $i ..."
  #jar tvf $i | grep $LOOK_FOR > /dev/null
  jar tvf "$i" | grep "$LOOK_FOR" 

  if [ $? == 0 ] ; then
    echo "==> Found \"$LOOK_FOR\" in $i"
  fi  
done #line 13

出力

wk@wk-laptop:$ sh lookjar.sh org/Apache/axis/message/addressing/EndpointReference  /media/0C06E20B06E1F61C/uengine/uengine
Looking in /media/0C06E20B06E1F61C/uengine/uengine/defaultcompany/build/uengine_settings.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/defaultcompany/WebContent/uengine-web/lib/FCKeditor/WEB-INF/lib/commons-fileupload.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/defaultcompany/WebContent/uengine-web/lib/FCKeditor/WEB-INF/lib/FCKeditor-2.3.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/defaultcompany/WebContent/uengine-web/processmanager/signedmetaworks.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/hsqldb/lib/hsqldb.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/hsqldb/lib/servlet.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/src/lib/commons-discovery.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/src/lib/google.jar ...
[: 13: 1: unexpected operator
Looking in /media/0C06E20B06E1F61C/uengine/uengine/src/lib/jxl.jar ...
26
wearetherock

=行では、==ではなく[ $? == 0 ]を使用する必要があります。

70

これを次のように変更する必要があります。

if [ $? -eq 0 ]; then
    ...

-eqは数値比較を行います。

シェルでは戻り値0が成功と見なされるという事実を利用して、次のようにコードを記述することもできます。

if jar tvf "$i" | grep "$LOOK_FOR"; then
    ...
8
#!/bin/sh
LOOK_FOR="$1"    
find $2 -name "*jar"`| while read -r file
  echo "Looking in $file ..."
  jar tvf "$file" | grep "$LOOK_FOR" 
  if [ $? -eq 0 ] ; then
    echo "==> Found \"$LOOK_FOR\" in $file"
  fi  
done
2
ghostdog74