[ -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 $num3
doesn't make sense) is not to find files whose name is$num3
, but files whose name matches the$num3
pattern. – Stéphane Chazelas Feb 02 '16 at 16:38printf
there can be replaced withread -p 'Please enter a file name' num3
instead. Also you'd first run the check then command substitute thefind
as in< <( find ... )
– Valentin Bajrami Feb 02 '16 at 19:55