I've set a function in a shell script that checks if a folder exists, if it does not exist, tries to created it, and if it can not create the folder (for example if the user does not the right permission) return 1.
Then I check this "return", but I don't understand why "if" does not work because the return equal 1.
Code:
#!/bin/bash
# Main folders
INPUT="input"
OUTPUT="output"
# Functions
function checkFolderExist(){
if [ -d $1 ]
then
# 0 = true
# Change to 0, only for tests.
return 1
else
mkdir $1
result=$?
if [ result==0 ]
then
# 0 = true
return 0
else
# 1 = false
return 1
fi
fi
}
CHECKINPUT=$(checkFolderExist $INPUT)
echo $?
CHECKOUTPUT=$(checkFolderExist $OUTPUT)
echo $?
# If folders does not exist, exit the script
if [[ "$CHECKINPUT" = 1 || "$CHECKOUTPUT" = 1 ]]; then
echo "[+] Error. Folder does not exist. Check user permissions."
exit 1
fi
Best Answer
There's a few things here.
$?
against anything or save it in a variable (unless you need to reference the same exit status multiple times).return
is seldom needed (seldom with an explicit return value at least).create_dir_if_needed
.[ result==0 ]
. The stringresult==0
is a string of non-zero length, and testing a string in this way will return true if the string has non-zero length, so the test is always true. You probably wanted[ "$result" -eq 0 ]
instead.With these things in mind:
This would return the exit status of
mkdir -p -- "$1"
. This command would create the named directory (and any intermediate directories) if this did not already exist. If themkdir
command fails to create the directory, it will exit with a non-zero exit status, which will become the exit status of the function.mkdir -p
will not fail if the directory already exists.You would use this as
or, since the function is trivial, you could get rid of it and say
A variation of the
create_dir_if_needed
function that usesmkdir
without-p
and will therefore never create missing parent directories to the given directory path:or,
A call to this function would return true (zero) if the directory already existed or if the
mkdir
call went well. Areturn
statement with no explicit value will return the exit status of the most recently executed statement, in this case it would return the positive outcome of the[ -d "$1" ]
test.