-4

我写了这个 bash 脚本。我也用参数写了我的函数。函数通常不带参数调用。参数采样了几种方式,但都没有成功

#!/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来避免出现问题。

另一个问题:该函数应该使用echo,而不是return,因为您使用的是 in $(...),它代替了函数的标准输出。

如果您在案例之间if使用而不是.fielifelse 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 回答