Estou tentando adicionar os comandos de manipulação de string abaixo em meu script de shell existente.
#!/bin/ksh
y=${#text}
echo "Length of text: $y"
echo "Last _ is in column $((${#text} - ${#end}))"
echo "Our position is till column $((${#text} - ${#end}-$x))"
len='expr $((${#text} - ${#end}-$x))'
echo $len
val=$( echo $text $len|awk '{print substr($0,0,$2)}')
echo $val
count='ls $val*|wc -l'
echo $count
Os comandos acima funcionam bem quando executados no terminal. mas quando eu adiciono ao meu script de shell existente que está sendo executado como um programa concorrente, o programa comete erros lançando o erro "Bad substitution". E eu sou capaz de identificar os erros no código adicionado recentemente para manipulações de strings.
Eu posso ver que o código é interpretado como shell korn e eu usei comandos shell korn apenas que funcionam no terminal, mas quando adicionados ao script unix do programa concorrente existente ele cometeu erros.
Abaixo está o código no meu script existente junto com comandos recém-adicionados
#Parameters : Takes the following input parameters.
# 1) Input base directory -- parameter 5
# 2) File Pattern -- Parameter 6
# 3) Appl short name -- parameter 7
# 4) appl. resp. -- parameter 8
# 5) Debug -- parameter 9
#=======================================================================
#!/bin/ksh
AppsUser="$3"
BaseDir="$5"
FilePattern="$6"
AppShortName="$7"
AppResp="$8"
DebugProgram="$9"
echo "Apps User=$AppsUser"
echo "Base Directory=$BaseDir"
echo "File Pattern=$FilePattern"
echo "App Short Name=$AppShortName"
echo "App Responsibility=$AppResp"
echo "Debug Program=$DebugProgram"
IncomingDir="$BaseDir/incoming"
ProcessedDir="$BaseDir/processed"
ProcessingDir="$BaseDir/processing"
TempFile="$BaseDir/incoming/absn_psoft_glfile_search_results.txt"
ConcProgram="ABSN_PEOPLESOFT_OGL_INTF_MAIN"
echo $ConcProgram
echo $TempFile
IFS="
"
export IFS
cd $IncomingDir
ls *_GL_*.dat 1> /dev/null 2> /dev/null
if [ $? = 0 ]
then
#for i in 'cat $TempFile'
for file in 'ls *_GL_*.dat'
do
echo "File being processed $file"
FILENAME=$file
#echo $FILENAME
len=${#FILENAME} -->Error thrown for this command
echo "The length is $len"
if [ -s $FILENAME ]
then
echo "Moving file $FILENAME to $ProcessingDir"
mv $IncomingDir/$FILENAME $ProcessingDir/$FILENAME
echo "Submitting concurrent Request using CONCSUB for File=$FILENAME"
CONCSUB $FCP_LOGIN $AppShortName $AppResp $AppsUser WAIT=N CONCURRENT ABSN $ConcProgram $FILENAME 0 $DebugProgram $ProcessingDir
echo "Submitted Request for File=$FILENAME"
sleep 60
else
echo "File size is 0 bytes, moving file to processed directory"
mv $IncomingDir/$FILENAME $ProcessedDir/$FILENAME.rmv
fi
done
else
echo "No GL PSoft files to process."
fi
#echo "After if"
echo "Completed Job, Exiting program with code 0"
exit 0
O script é anexado como um executável a um programa concorrente oracle e executado usando o programa concorrente