Hi ,
I 'm trying to check if multiple directories exist on a server, if not create the missing ones and print " creating missing directory.
how to write this in a simple script, I have made my code complex
if [ -d "${schemaExtractDir}/SchemaExtract" ]; then
taskStatus="Schema extract directory exists, checking if SQL,Count and SchExtArchive directories exist."
print -r "$taskStatus"
if [ -d "${schemaExtractDir}/SQL" ]; then
taskStatus="${schemaExtractDir}/SQL directory exists, checking if Count and SchExtArchive directories exists."
print -r "$taskStatus"
if [ -d "${schemaExtractDir}/Count" ]; then
taskStatus="${schemaExtractDir}/Count directory exists, checking if SchExtArchive directory exists."
print -r "$taskStatus"
if [ -d "${schemaExtractDir}/SchExtArchive" ]; then
taskStatus="${schemaExtractDir}/SchExtArchive directory exists."
print -r "$taskStatus"
else
taskStatus="${schemaExtractDir}/SchExtArchive directory does not exist, creating ${schemaExtractDir}/SchExtArchive directory"
print -r "$taskStatus"
mkdir -p ${schemaExtractDir}/SchExtArchive 2>/dev/null
fi
else
taskStatus="${schemaExtractDir}/Count directory does not exist, creating ${schemaExtractDir}/Count directory"
print -r "$taskStatus"
mkdir -p ${schemaExtractDir}/Count 2>/dev/null
fi
else
taskStatus="${schemaExtractDir}/SQL directory does not exist, creating ${schemaExtractDir}/SQL directory."
print -r "$taskStatus"
mkdir -p ${schemaExtractDir}/SQL 2>/dev/null
taskStatus="Checking if ${schemaExtractDir}/NPICount directory exists."
print -r "$taskStatus"
if [ -d "${schemaExtractDir}/Count" ]; then
taskStatus="${schemaExtractDir}/Count directory exists."
print "$taskStatus"
else
taskStatus="${schemaExtractDir}/Count directory does not exist, creating ${schemaExtractDir}/Count directory"
print "$taskStatus"
mkdir -p ${schemaExtractDir}/Count 2>/dev/null
fi
fi
else
taskStatus="Schema extract directory does not exist, creating schema extract,SQL,Count and SchExtArchive directories."
print -r "${taskStatus}"
mkdir -p ${schemaExtractDir} 2>/dev/null
mkdir -p ${schemaExtractDir}/SchemaExtract 2>/dev/null
mkdir -p ${schemaExtractDir}/SQL 2>/dev/null
mkdir -p ${schemaExtractDir}/Count 2>/dev/null
mkdir -p ${schemaExtractDir}/SchExtArchive 2>/dev/null
fi
chmod 755 ${schemaExtractDir}/SchemaExtract
chmod 755 ${schemaExtractDir}/SQL
chmod 755 ${schemaExtractDir}/Count
chmod 755 ${schemaExtractDir}/SchExtArchive
I want to acheive the above in few steps... not this many if else loops...
how to do it?
case "$var" in
value1)
commands;
;;
value2)
commands;
;;
*)
commands;
;;
esac
and for loops.
for (( i = <start number> ; i < <finish number>; i++ ))
do
<commands>
done
So basically you're code will look like this:
for (( i = 1 ; i < 4; i++ ))
do
case "$i" in
'1') dirname="<dir path 1>"
;;
'2') dirname="<dir path 2>"
;;
'3') dirname="<dir path 3>"
;;
esac
<enter the code for just the one directory here>
done
Basically, where the 1st 4 appears in the 1st line above, change that for the max number off directories you need to check for.
change <dir path 1> to the 1st directory path.
change <dir path 2> to the 2nd directory path....etc
and <enter the code for just the one directory here> put the actual code you were repeating countless times (but only 1 reitteration).
Each time you need to feed in the directory path, use $dirpath instead.
eg
if [ -d "$dirpath" ]; then
That's the basic theory anyway. I'm half asleep (as it's after midnight in the UK) and coding this directly into Chromium, so you'll have to do the debugging.
Thanks for the reply.
I'm confused with your approach, can you explain it at your convenience.
say my schemaExtractDir="/var/tmp"
I'm checking for multiple directories under it
"$schemaExtractDir/SchemaExtract"
"$schemaExtractDir/SQL"
"$schemaExtractDir/Count"
"$schemaExtractDir/SchExtArchive"
if [ -d "$schemaExtractDir/SchemaExtract" ]; then
print "SchemaExtract directory exists"
else
mkdir -p "$schemaExtractDir/SchemaExtract" 2>/dev/null
chmod 755 "$schemaExtractDir/SchemaExtract"
fi
If any of these directories are missing; then I need to create the missing directory and print a message to stdout,"creating missing directory "/var/tmp/Count".
Can I check for multiple directories within the red part , if so how do i do it
basically to check multiple directories, then you have to put your script inside a loop (so it runs the script several times - each time running it against a different directory)
The loop needs two parts to it:
1/ the loop itself (using for command)
2/ the directory name selector (using case to select which directory name to pass to your script per iteration of the loop)
To keep the forums high quality for all users, please take the time to format your posts correctly.
Use Code Tags when you post any code or data samples so others can easily read your code.
You can easily do this by highlighting your code and then clicking on the # in the editing menu. (You can also type code tags and by hand.)
Avoid adding color or different fonts and font size to your posts.
Selective use of color to highlight a single word or phrase can be useful at times, but using color, in general, makes the forums harder to read, especially bright colors like red.
Be careful when you cut-and-paste, edit any odd characters and make sure all links are working property.
Is it OK for you to keep the directories to check in a file, so you check (in)existing directories against the file?
#!/bin/sh
schemaExtractDir="/var/tmp"
while read dir; do
dir="$schemaExtractDir/$dir"
if [ -d "$dir" ]; then
echo "$dir exists, not creating this dir."
else
echo "$dir does not exist: creating one for you..."
mkdir "$dir"
fi
done < file
exit 0
file is a text file containing directories to create.
~$ cat file
SchemaExtract
SQL
Count
SchExtArchive
~$ ./script.sh
/var/tmp/SchemaExtract does not exist: creating one for you...
/var/tmp/SQL does not exist: creating one for you...
/var/tmp/Count exists, not creating this dir.
/var/tmp/SchExtArchive does not exist: creating one for you...