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