i am new to linux and bash and i am trying to build a bash script, that is quite similar to the well known cmd 'split' ...
it is now already "working" ... i can use it like:
./splitfix.sh -v -s 10 foo
./splitfix.sh -s 10 -v foo
./splitfix.sh -s 10 foo
./splitfix.sh -v foo
when i try wrong params i dont get an error (or the shorthelp) function and i dont know how to implement the --verbose tag in my code
this is the third version of my script and i cant find a possibility to check the parameters.
i always have the problem, that if one parameter is -s that than has to follow a number (size in bytes or lines).
can anybody help me out?
Code:
#!/bin/bash
#simple Tool to split files and txt files
#02.04.2011
###########################################
function usage () {
cat << EOF
$0 [OPTIONS] FILE [FILE ...] Split FILE into
fixed-size pieces.
The pieces are 10 lines long,
if FILE is a text file.
The pieces are 10 kiB long,
if FILE is *not* a text file.
The last piece may be smaller, it contains the rest
of the original file.
The output files bear the name of the input file
with a 4-digit numerical suffix.
The original file can be reconstructed with
the command ``cat FILE.*´´
EXAMPLE:
splitfix.sh foo.pdf
splits foo.pdf into the files
foo.pdf.0000 foo.pdf.0001 etc.
splitfix.sh [-h | --help] This help text
splitfix.sh --version Print version number
OPTIONS:
-h
--help this help text
-s SIZE size of the pieces
in lines (for text files)
or in bytes (for other files)
-v
--verbose print debugging messages
EOF
}
###########################################
function shorthelp () {
cat << EOF
Usage: splitfix.sh [OPTIONS] FILE [FILE ...]
»splitfix-sh --help« for more information.
EOF
}
###########################################
function check_param () {
if [[ $1 == '-s' ]]
then
printf "%d" $2 > /dev/null 2>&1
if [[ $? == 1 ]]
then
shorthelp
exit 1
else
SIZE=$2
fi
if [[ $3 == '-v' ]]
then
shift 3
verbose=on
splitting $SIZE $verbose $*
else
shift 2
echo "debug2"
splitting $SIZE $*
fi
else
if [[ $1 == '-v' ]]
then
shift 1
verbose=on
if [[ $1 == '-s' ]]
then
printf "%d" $2 > /dev/null 2>&1
if [[ $? == 1 ]]
then
shorthelp
exit 1
else
SIZE=$2
shift 2
splitting $SIZE $verbose $*
fi
else
splitting $verbose $*
fi
fi
fi
}
################################################
function splitting () {
if [[ $SIZE != "" ]]
then
shift 1
fi
if [[ $verbose == "on" ]]
then
shift 1
fi
for i in $*
do
# Existiert die Datei?
if [[ -e $i ]]
then
file --mime-type $i | grep -iq text
if [ $? -eq 0 ]
then
if [[ $SIZE -gt 0 ]]
then
if [[ $verbose = "on" ]]
then
echo "Die Textdatei wird gesplited"
fi
split --suffix-length=4 -d --lines=$SIZE $i $i.
else
if [[ $verbose = "on" ]]
then
echo "Die Textdatei wird gesplited"
fi
split --suffix-length=4 -d --lines=10 $i $i.
fi
else
if [[ $SIZE -gt 0 ]]
then
if [[ $verbose = "on" ]]
then
echo "Die Binärdatei wird gesplited"
fi
split --suffix-length=4 -d --bytes=$SIZE $i $i.
else
if [[ $verbose = "on" ]]
then
echo "Die Binärdatei wird gesplited"
fi
split --suffix-length=4 -d --bytes=10000 $i $i.
fi
fi
else
echo "File $i does not exist."
exit 1
fi
done
}
###########################################
# main()
case "$1" in
'--help' | '-h')
usage
;;
*)
# Mindestens ein Argument..
if [ $# -gt 0 ]
then
check_param $*
exit 0
else
shorthelp
exit 1
fi
esac
hi
I am writing a bash script that uses dialog to get user input an diplay messages to user. I have a small problem
dialog --inputbox "blabla" 20 50 2> /tmp/output
VAR="'cat /tmp/output'"
mkdir $VAR
the code below requests user for a directory path to be created.
But, if the user uses... (1 Reply)
I'm having problems with bash scripts. If a bash script is called with no arguments, I always get "PHIST=!" as the first argument (i.e. this is what $1 equals). Why? Where does this come from, and how can I fix it? Nothing in the bash man pages refer to this mysterious default argument. (2 Replies)
I have written a script and I get error and I don't understand why.
neededParameters=2
numOfParameters=0
correctNum=0
while getopts "s:l:" opt
do
case "$opt" in
s)
serviceName= $OPTARG #errorline 1
numOfParameters= $numOfParameters + 1
;;
l)
... (12 Replies)
I am using variable to give the location of the file I am using but I get error.
Here is the code:
LogFile=/tmp/log.email
echo -e "could not close the service - error number $error \n" > $LogFile
well this is not all the code but is enough because the problem start when I try to use the... (3 Replies)
When it comes to programing and UNIX, I know just enough to be really really dangerous.
I have written a python script to parse through a file that contains ~1 million lines. Depending on whether a certain string is matched, the line is copied into a particular file. For the sake of brevity,... (4 Replies)
Hi guys!
I'm new to the forum and to the Bash coding scene.
I have the following code
paths=/test/a
paths=/test/b
keywords=\"*car*\"
keywords=\"*food*\"
for file in `find paths -type f -ctime -1 -name keywords -print 2>/dev/null`
do
#.... do stuff here for every $file found... (5 Replies)
Hi,
Below is my bash script:
cat run_all.sh
if && ; then
Number_Count_Program $1.results $2.results > $1.$2.counts
else
Number_Split_Program $1.results $2.results > $1.$2.split
fi
After I run the following command:
./run_all.sh A B
./run_all.sh: line 1:
Anybody advice to edit... (5 Replies)
Hi,
I have 100 files containing different values in single column,
I want to split those files in two separate files (file2 and file3) based on average value of first column of each file,
for those files I am working on the following script
#bin/bash
for memb in $(seq 1 100)
do
awk... (4 Replies)
I am trying to write a Bash Script using a couple of arrays. I need to perform a countdown of sorts on an array done once daily, but each day would start with the numbers from the previous day. This is what I'm starting with :
#!/bin/bash
days=(9 8 7 6 5)
for (( i = 0 ; i < ${#days} ; i++... (4 Replies)