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