[ -f $num3 ]
Doesn't make sense as you're applying the split+glob operator to the content of $num3.
[ -f "$num3" ]
Would check whether the $num3 path (absolute if it starts with a /, relative to the current working directory if not) resolves to a file that is of type regular or a symlink to a regular file.
If you want to check whether $num3 relative to a given directory is a regular file, just use:
dir=/some/dir
[ -f "$dir/$sum3" ]
You may want to check beforehand that $sum3 doesn't start with a / or doesn't contain a /.
Note that if $dir is /, that approach will not work on systems that treat //foo/bar paths specially. So you may want to treat the dir=/ case specially.
case $dir in
/) file=$dir$num3
*) file=$dir/$num3
esac
[ -f "$file" ]
To check that $num3 is a relative path (to a regular file) of any directory in the directory tree rooted at the current directory, best would be to use zsh instead:
files=(**/$num3(DN-.))
if (($#files > 0)); then
echo "Success: $#files such file(s) found"
else
echo Failure
fi
man find– Chris Davies Feb 02 '16 at 16:26-name "$num3"(-name $num3doesn't make sense) is not to find files whose name is$num3, but files whose name matches the$num3pattern. – Stéphane Chazelas Feb 02 '16 at 16:38printfthere can be replaced withread -p 'Please enter a file name' num3instead. Also you'd first run the check then command substitute thefindas in< <( find ... )– Valentin Bajrami Feb 02 '16 at 19:55