我有如下所示的 Linux 脚本。我可以让它从解密方法返回没有什么我需要解压一个文件。方法解密发送一个带有 zip 文件名称的字符串。请给一些建议。我提到另一种方法可以正确地显示文件。
m_mode_verbose=1
const_1="ceva"
val="valoare"
decrypt ()
{
PASSPHRASE="xxxx"
encrypted=$1
local decrypt1=`echo $encrypted | awk '{print substr($0,0,64)}'`
echo "$PASSPHRASE"|gpg --no-tty --batch --passphrase-fd 0 --quiet --yes --decrypt -o ${sspTransferDir}/${decrypt1} ${sspTransferDir}/${encrypted} 2> /dev/null
if [ $? -eq 0 ]
then
notify "pgp decrypt of file.pgp succeeded"
else
notify "pgp decrypt of file.pgp failed"
fi
# PASSPHRASE=”your passphrase used for PGP”
# echo "$PASSPHRASE"|gpg --no-tty --batch --passphras
#e-fd 0 --quiet --yes \
#–decrypt -o file.dat file.pgp 2> /dev/null
#if [ $? -eq 0 ]
#then
# echo "pgp decrypt of file.pgp succeeded"
#else
# echo "pgp decrypt of file.pgp failed"
#fi
# echo "testtest $decrypt1"
echo "valoare ="$decrypt1
val=$decrypt1
#eval $decrypt1
$CONST=$decrypt1
echo "local"$CONST
}
process_file()
{
f=$1
echo "Processing $f"
for encrypted in `cat $f`; do
echo "Name of the file: "$i
echo "Decrypted : " $decrypted
decrypted=$(decrypt ${encrypted}) #decrypted = decrypt(encrypted)
# decrypted=decrypt ${encrypted} ${decrypted} #decrypted = decrypt(encrypted)
echo "val ============== " $val
echo "Decrypted after method" $decrypted
unzip -o ${TransferDir}/${decrypted} -d ${ImportRoot}
echo "Path after unzip" $ImportRoot
#rm -f ${decrypted}
echo "After remove" $decrypted
path=${sspTransferDir}/${encrypted}
#rm -f ${sspTransferDir}/${encrypted}
echo "Path to remove" $path
echo "Const ="$CONST
done
}
#main
get_config;
file="output$lang.txt"
echo "file is $file"
get_file_list $file # fills $file with the list of encrypted files corresponding to language $language
process_file $file #process - decrypt,
答案1
Shell函数模仿子进程;与子进程一样,它们的返回值只是一个 8 位数字,通常表示成功(0)或失败(非零)。要将数据传递出函数,请将其存储在变量中。除非声明如此,否则变量对于函数来说不是局部的。
decrypt () {
…
valoare="$decrypt1"
}
…
decrypt
decrypted="$valoare"
请注意,我还没有审阅您的脚本。破碎的缩进和似乎与它们的用途无关的变量名称很难阅读。我确实看到了一些明显的潜在问题:许多命令在变量替换周围缺少双引号。始终在变量和命令替换两边加上双引号:"$val"
等。还有其他一些没有意义的位,例如$CONST=$decrypt1
— 设置变量CONST
、删除$
.
答案2
为了回答您的问题的标题,shell 函数通常通过将数据打印到 stdout 来返回数据。调用者捕获返回值与retval="$(func "$arg1" "$arg2" "$@")"
或类似。另一种方法是将变量的名称传递给它以在其中存储值(使用printf -v "$destvar"
)。
如果您的脚本不起作用,可能是由于引用问题。您缺少许多变量扩展的引号。
例如
echo "valoare ="$decrypt1
# should be:
echo "valoare =$decrypt1"
您的版本引用了文字部分,但随后将用户数据保持开放状态以供 shell 解释。的输出中的多个空白字符会$decrypt1
折叠为单个空格。echo