-4

このbashスクリプトを書きました。また、関数をparamで書きました。関数は通常、パラメータなしで呼び出されます。パラメータはいくつかの方法でサンプリングされましたが、どれも成功していません

#!/bin/bash
   RESULT_DIR="./imgR"
   rm -r $RESULT_DIR
   mkdir $RESULT_DIR
   widthOrigin=0
   heightOrigin=0
   widthR=0
   heightR=0
   for i in ~/img/{*.jpg,*.jpeg,*.png,*.JPG,*.JPEG,*.PNG}   
   do
   echo  "file" $i
   if [ -f $i ]
   then 
   echo "file1" 
   widthOrigin=`identify -format "%w" $i`
   #$checkTwo
   widthR=$(checkTwo $widthOrigin)
   heightOrigin=`identify -format "%h" $i`
   #heightR=$(checkTwo $heightOrigin)

   echo "width origin" $widthOrigin " width power 2" $widthR
   echo "height origin" $heightOrigin "wicth power 2" $heightR

   #convert -resize $widthR $heightR $i $RESULT_DIR/$(basename "$i") 
   fi
   done
   exit 0

そして私の機能

   checkTwo(){
   echo "checkTwo"
   param=$1
   echo "param" $param
   if [ param -ge "1024"]
   then
   return 1024
   else

   if [param -ge "512"]
   then 
   return "512"
   else

   if [param -ge "256"]
   then
   return "256"
   else

   if [param -ge "64"]
   then
   return "64"
   else

   if [param -ge "32"]
   then
   return "32"
   else

   if [param -ge "16"]
   then 
   return "16"

   else
   if [param -ge "4"]
   return "4"
   else
   return "2"

   fi fi fi fi fi  fi  fi   
   }
   }
   #end 

しかし、行 " widthR=$(checkTwo $widthOrigin)" には、「関数 widthOrigin が見つかりません」というエラーがあります

4

1 に答える 1

1

そのはず:

if [ "$param" -ge "1024" ]

展開するには、変数名の前にドル記号が必要です。[と の前後にスペースが必要です]$paramパラメータが空であるか、空白が含まれている場合の問題を回避するには、引用符で囲む必要があります。

別の問題: 関数は、関数の stdout を置き換える で使用しているためecho、 ではなくを使用する必要があります。return$(...)

またif、. fi_ elif_else if

if ...
then ...
elif ...
then ...
elif ...
then ...
else ...
fi

function への参照がないため、特定のエラーが発生する理由を説明できませんwidthOrigin

実際には、その関数全体をループとして実装します。

x=1024
while [ "$param" -lt $x ] && [ $x -gt 2 ]
do
    x=((x>>1))
done
echo $x
于 2013-09-23T18:03:55.623 に答える