아래와 같이 Linux 스크립트가 있습니다. 암호 해독 방법에서 반환되도록 할 수 있습니다.아무것도 없다파일의 압축을 풀어야 합니다. decrypt 메서드는 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
셸 함수는 하위 프로세스를 모방합니다. 하위 프로세스와 마찬가지로 해당 반환 값은 일반적으로 성공(0) 또는 실패(0이 아님)를 나타내는 8자리 숫자입니다. 함수에서 데이터를 전달하려면 해당 데이터를 변수에 저장하세요. 변수는 그렇게 선언되지 않는 한 함수에 로컬이 아닙니다.
decrypt () {
…
valoare="$decrypt1"
}
…
decrypt
decrypted="$valoare"
아직 귀하의 스크립트를 검토하지 않았습니다. 깨진 들여쓰기와 목적과 전혀 관련이 없어 보이는 변수 이름으로 인해 읽기가 어렵습니다. 몇 가지 명백한 잠재적인 문제가 있습니다. 많은 명령에 변수 대체에 큰따옴표가 누락되어 있습니다.변수 및 명령 대체에는 항상 큰따옴표를 사용하십시오.: "$val"
기다리다. $CONST=$decrypt1
변수 설정 CONST
, 삭제 등 이해되지 않는 다른 부분이 있습니다 $
.
답변2
질문 제목에 답하기 위해 쉘 함수는 일반적으로 데이터를 stdout으로 인쇄하여 반환합니다. 호출자 캡처 반환 값 retval="$(func "$arg1" "$arg2" "$@")"
은 또는 와 유사합니다. 또 다른 방법은 (를 사용하여) 값을 저장할 변수의 이름을 전달하는 것입니다 printf -v "$destvar"
.
스크립트가 작동하지 않으면 참조 문제 때문일 수 있습니다. 많은 변수 확장에 대한 따옴표가 누락되었습니다.
예를 들어
echo "valoare ="$decrypt1
# should be:
echo "valoare =$decrypt1"
귀하의 버전에서는 리터럴 부분을 인용하지만 쉘에서 해석할 수 있도록 사용자 데이터를 열어 둡니다. 출력의 여러 공백 문자는 $decrypt1
단일 공백으로 축소됩니다.echo