Help with create multiple directories under diff file systems

Hi,

Need help ...I want to create multiple directories in different /file systems using for loop..eg. ../ORCL_data01/oradata/orcl/ctl.
../ORCL_data01/oradata/orcl/data.
../ORCL_data01/oradata/orcl/redo.

Script :-

for dir in `ls -d /${ORACLE_SID}_data[0-9][0-9]`
do
mkdir -p $dir/oradata/${ORACLE_SID}/ctrl
mkdir -p $dir/oradata/${ORACLE_SID}/data
mkdir -p $dir/oradata/${ORACLE_SID}/redo
done

I'm getting the following error :-

ls -d /${ORACLE_SID}_data[0-9][0-9]
+ ls -d '/ORCL_data[0-9][0-9]'
ls: cannot access /ORCL_data[0-9][0-9]: No such file or directory

Directories

/ORCL_data01
/ORCL_data02
/ORCL_data03
/ORCL_index01
/ORCL_index02
/ORCL_redo01
/ORCL_redo02
/ORCL_archive01

========

Thanks

There is no need to create a sub shell and call ls the shell can expand the files for you.

Try:

for dir in /${ORACLE_SID}_data[0-9][0-9]
do
  if [ -d "$dir" ]
  then
      mkdir -p "$dir/oradata/${ORACLE_SID}/ctrl"
      mkdir -p "$dir/oradata/${ORACLE_SID}/data"
      mkdir -p "$dir/oradata/${ORACLE_SID}/redo"
   else
      echo "/${ORACLE_SID}_dataNN dir(s) not found"
      exit 1
   fi
done

Thanks a lot for the reply...

for dir in /${ORACLE_SID}_data[0-9][0-9]
do
  if [ -d "$dir" ]
  then
      mkdir -p "$dir/oradata/${ORACLE_SID}/ctrl"
      mkdir -p "$dir/oradata/${ORACLE_SID}/data"
      mkdir -p "$dir/oradata/${ORACLE_SID}/redo"
   else
      echo "/${ORACLE_SID}_dataNN directories do not exist"
      exit 1
   fi
done

But i'm still getting same error...

Error :-

+ [ -d '/ORCL_data[0-9][0-9]' ]
+ echo '/ORCL_dataNN directories do not exist'
/ORCL_dataNN directories do not exist
+ exit 1

===============

This is not an error, but perfect execution of your script.
Are you sure the directories exist in the / (root) directory? Post the output of

ls -d /${ORACLE_SID}_data[0-9][0-9]

or, if that fails, the output of

ls /

Note that mkdir with or without -p does not create new filesystems. The directories created by mkdir will always be in the same filesystem as the directory in which the parent directory resides.

To create new filesystems, you need mount , not mkdir .

for dir in /${ORACLE_SID}_data{01,02,03}
do

RudiC, Thanks for your Reply ..The directory do exists.

[oracle@db1 ~]$ ls -d /ORCL_data[0-9][0-9]
/ORCL_data01
[oracle@db1 ~]$

[oracle@db1 /]$ ls /
app  bin  boot  cgroup  dev  etc  home  lib  lib64  lost+found  media  misc  mnt  net  opt  ORCL_archive01  ORCL_data01  ORCL_index01  ORCL_redo01  proc  root  sbin  selinux  srv  sys  tmp  usr  var
[oracle@db1 /]$

2) Thanks MadeInGermany for your reply..I have tried that option and it did not work too..

for dir in /${ORACLE_SID}_data{01,02,03}
do
  if [ -d "$dir" ]
  then
      mkdir -p "$dir/oradata/${ORACLE_SID}/ctrl"
      mkdir -p "$dir/oradata/${ORACLE_SID}/data"
      mkdir -p "$dir/oradata/${ORACLE_SID}/redo"
   else
      echo "/${ORACLE_SID}_dataNN directories do not exist"
      exit 1
   fi
done


+ [ -d /pd1mds_data01 ]
+ echo '/pd1mds_dataNN directories do not exist'
/pd1mds_dataNN directories do not exist
+ exit 1

Leave out the if test!
Simply have the

mkdir -p ...

as in your initial code.

In the trace and message here we see "pd1mds" not "ORCL" it looks like your ${ORACLE_SID} variable as the wrong value here.