what seem problem code
#/usr/bin/ksh rampath=/home/ram0 remotefile=site information_2013-07-11-00-01-56.csv cd $rampath newfile=$(echo "$romotefile" | tr ' ' '_') mv "$remotefile" "$newfile"
error got after running script:
mv site information_2013-07-11-00-01-56.csv :653-401 cannot rename site information_2013-07-11-00-01-56.csv file or directory in path name not exist.
the file exist on directory. did putting double quotes in variable. same error above.
oldfile=$(echo "$remotefile" | sed 's/^/"/;s/$/"/' | sed 's/^m//') newfile=$(echo "$romotefile" | tr ' ' '_') mv "$remotefile" "$newfile"
there @ least 2 problems:
- the script has typo in variable name, @shelter suggested.
- the value assigned variable should quoted.
typo
newfile=$(echo "$romotefile" | tr ' ' '_') # returns empty string mv "$remotefile" "$newfile"
the shell permissive language. typos made.
one way of catching them force error on unset variables. -u
option that. include set -u
@ top of script, or run script ksh -u scriptname
.
another way test individually each variable, adds overhead code.
newfile=$(echo "${romotefile:?}" | tr ' ' '_') mv "${remotefile:?}" "${newfile:?}"
the ${varname:?[message]}
construct in ksh , bash generate error if variable varname
unset or empty.
variable assignment
an assignment like
varname=word1 long-string
must written as:
varname="word long-string"
otherwise, read assignment varname=word
in environment created command long-string
.
$ remotefile=site information_2013-07-11-00-01-56.csv -ksh: information_2013-07-11-00-01-56.csv: not found [no such file or directory] $ remotefile="site information_2013-07-11-00-01-56.csv"
as bonus, ksh allows replace characters during variable expansion ${varname//string1/string2}
method:
$ newfile=${remotefile// /_} $ echo "$newfile" site_information_2013-07-11-00-01-56.csv
if you're new (korn) shell programming, read manual page, sections on parameter expansion , variables.
Comments
Post a Comment