Skip to content

Instantly share code, notes, and snippets.

@nobucshirai
Created April 4, 2014 12:34
Show Gist options
  • Save nobucshirai/9973771 to your computer and use it in GitHub Desktop.
Save nobucshirai/9973771 to your computer and use it in GitHub Desktop.
sed-wrapper script for cafemol input and job files.
#!/bin/bash
N_TSTEP=1000000 # 1 day
JOB_PATH="${PWD%/*}"
main(){
os_check
check_options $@
file_name_def $@
dir_check
# [1] SED INPUT FILE
mkdir_idne back
backer $INP_FILE
cat $TEMP_INP_FILE | \
sed "s/PROJECT_NAME/${PROJECT_NAME}/g" | \
sed "s/N_TSTEP/${N_TSTEP}/g" \
> $INP_FILE
cp -vp $INP_FILE ../inp/
# [2] SED JOB FILE
JOB_PATH="`echo $JOB_PATH |\
sed 's/\//\\\\\//g' `"
backer $JOB_FILE
cat $TEMP_JOB_FILE | \
sed "s/PROJECT_NAME/${PROJECT_NAME}/g" | \
sed "s/JOB_PATH/${JOB_PATH}/g" \
> $JOB_FILE
cp -vp $JOB_FILE ../
}
file_name_def(){
dir="templates"
TEMP_INP_FILE="`ls $dir/*.inp`"
PREFIX="${TEMP_INP_FILE##*/}"; PREFIX="${PREFIX%_PROJECT_NAME.inp}"
TEMP_JOB_FILE="$dir/${PREFIX}_PROJECT_NAME.sh"
INP_FILE="${PREFIX}_${PROJECT_NAME}.inp"
JOB_FILE="${PREFIX}_${PROJECT_NAME}.sh"
}
dir_check(){
if [ ! -d "$dir" ];then
echo "$dir dose not exist."
exit 1
fi
}
os_check(){
word_count=(`echo $JOB_PATH | grep -c Volumes`)
if (($word_count>=1)); then
echo "PLEASE EXECUTE ON SERVER"
exit
fi
}
check_options(){
usage_msg="\
Usage: $0 [options] PROJECT_NAME
Options:
-h show this help
"
TargetDir=""
while getopts h option
do
case "$option" in
h)
echo "$usage_msg"
exit 0
;;
\?)
echo "Usage: $0 [-h] [-d dir] files" 1>&2
exit 1;;
esac
done
shift `expr "$OPTIND" - 1`
if [ $# = 0 ]; then
echo "PLEASE INPUT PROJECT_NAME"
exit 1
else
PROJECT_NAME="$1"
fi
}
rm_-i(){
if [ -f $1 ];then
rm -i $1
fi
}
backer(){
check_options_backer $@
Ind=1
for file in ${ArgFiles[@]}
do
echo "[${Ind}] $file"
check_BackDir $file
if [ "$check" = 0 ]; then
counter=(`ls $BackDir | wc -w`)
BackFile="${counter}_${FileName}"
DiffFile=""
while true
do
if [ -f $BackDir/$BackFile ];then
((counter++))
BackFile="${counter}_${FileName}"
else
if [ $counter != 0 ]; then
DiffFile="$((counter-1))_${FileName}"
fi
break
fi
done
if [[ "$DiffFile" != "" ]]; then
DiffCount=(`diff $file $BackDir/$DiffFile | wc`)
else
DiffCount=(1)
fi
if [ $DiffCount != 0 ]; then
cp -vp $file $BackDir/$BackFile
else
echo " Backup has already done."
fi
fi
((Ind++))
done
}
check_options_backer(){
usage_msg="\
Usage: $0 [options] files
Options:
-h show this help
-d dir select TargetDir
-c make backups at current directory
"
TargetDir=""
while getopts hd:c option
do
case "$option" in
h)
echo "$usage_msg"
exit 0
;;
d)
TargetDir="$OPTARG"
if [ -d "$OPTARG" ]; then
echo "TargetDir = $OPTARG"
else
echo "$OPTARG does not exist."
fi
;;
c)
TargetDir="."
;;
\?)
echo "Usage: $0 [-h] [-d dir] files" 1>&2
exit 1;;
esac
done
shift `expr "$OPTIND" - 1`
ArgFiles=($@)
if [ ${#ArgFiles} = 0 ];then
echo "$usage_msg"
exit 1
fi
if [ -d "$TargetDir/Back" ]; then
TargetDir="$TargetDir/Back"
elif [ -d "$TargetDir/back" ]; then
TargetDir="$TargetDir/back"
elif [ -d "$TargetDir/BACK" ]; then
TargetDir="$TargetDir/BACK"
else
TargetDir="$TargetDir"
fi
}
check_BackDir(){
file="$1"
if [ ! -f "$file" ];then
echo "$file does not exist"
check=1
return
fi
slash_count=`echo $file | grep -c "/"`
if [[ $slash_count != 0 ]]; then
FileDir="${file%/*}"
else
FileDir="."
fi
FileName="${file##*/}"
BackDirName="${FileName}.dir"
if [ "$TargetDir" = "" ];then
if [ -d "$FileDir/Back" ]; then
BackDir="$FileDir/Back/$BackDirName"
elif [ -d "$FileDir/back" ]; then
BackDir="$FileDir/back/$BackDirName"
elif [ -d "$FileDir/BACK" ]; then
BackDir="$FileDir/BACK/$BackDirName"
else
BackDir="$FileDir/$BackDirName"
fi
else
BackDir="$TargetDir/$BackDirName"
fi
mkdir_idne $BackDir
check=0
}
mkdir_idne(){
if [ ! -d $1 ]; then
mkdir $1
echo "---> $1 was created."
fi
}
main $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment