我在bash中的功能

时间:2013-09-23 18:00:03

标签: linux bash

我写了这个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”

1 个答案:

答案 0 :(得分:1)

应该是:

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

在变量名称之前需要一个美元符号才能展开它。您需要[]周围的空格。如果参数为空或包含空格,则需要$param左右的引号以避免出现问题。

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

如果您在案例之间使用if而不是fi,那么您也不需要所有嵌套的elif,最后有else if

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

我无法解释为什么你得到了你得到的具体错误,因为没有对函数widthOrigin的引用。

实际上我将整个函数实现为循环:

x=1024
while [ "$param" -lt $x ] && [ $x -gt 2 ]
do
    x=((x>>1))
done
echo $x