linux - 我在 bash 中的函数

标签 linux bash

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

最佳答案

应该是:

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

变量名称前需要有一个美元符号才能展开。并且 [] 周围需要空格。如果参数为空或包含空格,则需要用 $param 引号来避免出现问题。

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

如果您在大小写之间使用 elif 而不是 else if,那么您也不需要所有那些嵌套的 if,以及末尾无数的 fi

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

关于linux - 我在 bash 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18965814/

相关文章:

linux - 在 Centos 上构建,安装 PerlIO::gzip 时出现 Zlib.h 错误

bash 根据日期创建文件?

ruby - 如何在命令行上获取 ruby​​ -e 的管道输入?

c++ - 组播接收程序优化

linux - 如何在linux bash或python中检查两个文件是否在同一物理硬盘中?

php session 文件死锁

linux - 虽然导出 gg 我得到了未绑定(bind)的变量 gg

linux - awk:致命:无法打开文件 `' 进行读取(没有这样的文件或目录)

bash - 在 shell 脚本中到处强制设置 -e 的惯用方法

python - 当我以 root 身份运行我的 PyQt 应用程序时,为什么我的 QIcons 不显示在我的 QMenu 中?