Sh Script whats wrong?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sh Script whats wrong?
# 1  
Old 12-17-2013
Sh Script whats wrong?

Hi there,

i have a problem i have created followning sh files some years ago but now it dosen`t work anymore i never used it a long time. Can anyone find the Error? Its always runs the stop() block and trying to Killing the Server also if i try to start or creat a new one.
Code:
#!/bin/sh

stop()
{
	echo "Killing old shoutcast servers in $1"
	for oldpid in `ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6`
	do
		kill -9 $oldpid
	done
	rm -f $HOME/$1/shoutcast.pid
}


start()
{
	servcount=0
	for cfile in `ls $HOME/$1`
	do
		echo -n $cfile
		echo -n " -> "
		#grep ^RelayServer /etc/shoutcast/$cfile
		grep ^RelayServer $HOME/$1/$cfile
		# This is the line where we actually run the shoutcast program!
		#sudo -u nobody /home/shoutcast/sc_serv /home/shoutcast/$cfile > /dev/null &
		$HOME/$1/sc_serv $HOME/$1/$cfile > /dev/null &
		servcount=`expr $servcount + 1`
	done
	#Create the pid file...
	ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6 > $HOME/$1/shoutcast.pid
	#Done now!
	echo "Started $servcount servers in $1."
}


creat()
{
	if [[ -d "$1" ]]
	then
		echo "ERROR: STREAM $1 already exists !!"
	else
		mkdir -p $HOME/$1
		cp -f sc_serv $HOME/$1/.
		touch $HOME/$1/sc_serv.cfg
		echo "Creating the CONFIG file $HOME/$1/sc_serv.cfg..."
		echo "Enter MaxUser: "
		read listener
		echo "Enter Password: "
		read pass
		echo "Enter PortBase: "
		read port
		echo "Enter AdminPassword: "
		read apass

		echo "MaxUser=$listener" > $HOME/$1/sc_serv.cfg
		echo "Password=$pass" >> $HOME/$1/sc_serv.cfg
		echo "PortBase=$port" >> $HOME/$1/sc_serv.cfg
		echo "LogFile=sc_serv.log" >> $HOME/$1/sc_serv.cfg
		echo "RealTime=1" >> $HOME/$1/sc_serv.cfg
		echo "ScreenLog=1" >> $HOME/$1/sc_serv.cfg
		echo "ShowLastSongs=10" >> $HOME/$1/sc_serv.cfg
		echo "W3CEnable=Yes" >> $HOME/$1/sc_serv.cfg
		echo "W3CLog=sc_w3c.log" >> $HOME/$1/sc_serv.cfg
		echo "SrcIP=ANY" >> $HOME/$1/sc_serv.cfg
		echo "DestIP=ANY" >> $HOME/$1/sc_serv.cfg
		echo "Yport=80" >> $HOME/$1/sc_serv.cfg
		echo "NameLookups=0" >> $HOME/$1/sc_serv.cfg
		echo "AdminPassword=$apass" >> $HOME/$1/sc_serv.cfg
		echo "AutoDumpUsers=0" >> $HOME/$1/sc_serv.cfg
		echo "AutoDumpSourceTime=30" >> $HOME/$1/sc_serv.cfg
		echo "TitleFormat=%s" >> $HOME/$1/sc_serv.cfg
		echo "PublicServer=default" >> $HOME/$1/sc_serv.cfg
		echo "AllowRelay=Yes" >> $HOME/$1/sc_serv.cfg
		echo "AllowPublicRelay=Yes" >> $HOME/$1/sc_serv.cfg
		echo "MetaInterval=32768" >> $HOME/$1/sc_serv.cfg
	fi
}


case "$1" in
	start)
		if [[ ! -e $HOME/$2/shoutcast.pid ]]
		then
			start $2
			if [[ -e $HOME/$2/shoutcast.pid ]]
			then
				echo "Shoutcast $2 Startup...... [SUCCESS]"
			fi
		else
			echo "Shoutcast $2 Startup...... [FAILED]"
		fi
		;;
	restart)
		stop $2
		sleep 4
		start $2
		if [[ -e $HOME/$2/shoutcast.pid ]]
		then
			echo "Shoutcast $2 Startup...... [SUCCESS]"
		fi
		;;
	stop)
		if [[ -e $HOME/$2/shoutcast.pid ]]
		then
			stop $2
			echo "Shoutcast $2 shutdown...... [SUCCESS]"
		else
			echo "There are no registered shoutcast servers running right now in $2. Attempting to kill anyways."
			stop $2
		fi
		;;
	creat)
		creat $2
		if [[ -d "$2" ]]
		then
			echo "Shoutcast $2 folder created...... [SUCCESS]"
		else
			echo "Shoutcast $2 folder created...... [FAILED]"
		fi
		;;
	*)
		echo "Usage: sh ./shoutcast.sh (start|stop|restart|creat) (FOLDER_NAME)"
		;;
esac

Sorry for my bad english

Last edited by vbe; 12-17-2013 at 12:28 PM.. Reason: typo
# 2  
Old 12-17-2013
I see missing:
Code:
case $1 in   # no double quotes here...
'start')

etc
(none for the last one (*))

Last edited by vbe; 12-17-2013 at 12:32 PM..
# 3  
Old 12-17-2013
ok i changed it to:
Code:
#!/bin/sh

stop()
{
	echo "Killing old shoutcast servers in $1"
	for oldpid in `ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6`
	do
		kill -9 $oldpid
	done
	rm -f $HOME/$1/shoutcast.pid
}


start()
{
	servcount=0
	for cfile in `ls $HOME/$1`
	do
		echo -n $cfile
		echo -n " -> "
		#grep ^RelayServer /etc/shoutcast/$cfile
		grep ^RelayServer $HOME/$1/$cfile
		# This is the line where we actually run the shoutcast program!
		#sudo -u nobody /home/shoutcast/sc_serv /home/shoutcast/$cfile > /dev/null &
		$HOME/$1/sc_serv $HOME/$1/$cfile > /dev/null &
		servcount=`expr $servcount + 1`
	done
	#Create the pid file...
	ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6 > $HOME/$1/shoutcast.pid
	#Done now!
	echo "Started $servcount servers in $1."
}


creat()
{
	if [[ -d "$1" ]]
	then
		echo "ERROR: STREAM $1 already exists !!"
	else
		mkdir -p $HOME/$1
		cp -f sc_serv $HOME/$1/.
		touch $HOME/$1/sc_serv.cfg
		echo "Creating the CONFIG file $HOME/$1/sc_serv.cfg..."
		echo "Enter MaxUser: "
		read listener
		echo "Enter Password: "
		read pass
		echo "Enter PortBase: "
		read port
		echo "Enter AdminPassword: "
		read apass

		echo "MaxUser=$listener" > $HOME/$1/sc_serv.cfg
		echo "Password=$pass" >> $HOME/$1/sc_serv.cfg
		echo "PortBase=$port" >> $HOME/$1/sc_serv.cfg
		echo "LogFile=sc_serv.log" >> $HOME/$1/sc_serv.cfg
		echo "RealTime=1" >> $HOME/$1/sc_serv.cfg
		echo "ScreenLog=1" >> $HOME/$1/sc_serv.cfg
		echo "ShowLastSongs=10" >> $HOME/$1/sc_serv.cfg
		echo "W3CEnable=Yes" >> $HOME/$1/sc_serv.cfg
		echo "W3CLog=sc_w3c.log" >> $HOME/$1/sc_serv.cfg
		echo "SrcIP=ANY" >> $HOME/$1/sc_serv.cfg
		echo "DestIP=ANY" >> $HOME/$1/sc_serv.cfg
		echo "Yport=80" >> $HOME/$1/sc_serv.cfg
		echo "NameLookups=0" >> $HOME/$1/sc_serv.cfg
		echo "AdminPassword=$apass" >> $HOME/$1/sc_serv.cfg
		echo "AutoDumpUsers=0" >> $HOME/$1/sc_serv.cfg
		echo "AutoDumpSourceTime=30" >> $HOME/$1/sc_serv.cfg
		echo "TitleFormat=%s" >> $HOME/$1/sc_serv.cfg
		echo "PublicServer=default" >> $HOME/$1/sc_serv.cfg
		echo "AllowRelay=Yes" >> $HOME/$1/sc_serv.cfg
		echo "AllowPublicRelay=Yes" >> $HOME/$1/sc_serv.cfg
		echo "MetaInterval=32768" >> $HOME/$1/sc_serv.cfg
	fi
}


case $1 in
	'start')
		if [[ ! -e $HOME/$2/shoutcast.pid ]]
		then
			start $2
			if [[ -e $HOME/$2/shoutcast.pid ]]
			then
				echo "Shoutcast $2 Startup...... [SUCCESS]"
			fi
		else
			echo "Shoutcast $2 Startup...... [FAILED]"
		fi
		;;
	'restart')
		stop $2
		sleep 4
		start $2
		if [[ -e $HOME/$2/shoutcast.pid ]]
		then
			echo "Shoutcast $2 Startup...... [SUCCESS]"
		fi
		;;
	'stop')
		if [[ -e $HOME/$2/shoutcast.pid ]]
		then
			stop $2
			echo "Shoutcast $2 shutdown...... [SUCCESS]"
		else
			echo "There are no registered shoutcast servers running right now in $2. Attempting to kill anyways."
			stop $2
		fi
		;;
	'creat')
		creat $2
		if [[ -d "$2" ]]
		then
			echo "Shoutcast $2 folder created...... [SUCCESS]"
		else
			echo "Shoutcast $2 folder created...... [FAILED]"
		fi
		;;
	*)
		echo "Usage: sh ./shoutcast.sh (start|stop|restart|creat) (FOLDER_NAME)"
		;;
esac

But it still just running the:
Code:
stop()
{
	echo "Killing old shoutcast servers in $1"
	for oldpid in `ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6`
	do
		kill -9 $oldpid
	done
	rm -f $HOME/$1/shoutcast.pid
}

# 4  
Old 12-17-2013
What is your OS and version?




---
Quote:
Originally Posted by vbe
I see missing:
Code:
case $1 in   # no double quotes here...
'start')

etc
(none for the last one (*))
Hi vbe, I agree the double quotes around $1 serve no purpose here, but they are allowed.
The single quotes around start are not necessary...
# 5  
Old 12-17-2013
I use Debian 7.2
# 6  
Old 12-17-2013
In sh you should use single squared brackets, not double ones those are not POSIX shell syntax (some shells may allow them but they are not part of the syntax). Debian uses a strict POSIX shell (dash) as /bin/sh

So if [ ! -e $HOME/$2/shoutcast.pid ] instead of if [[ ! -e $HOME/$2/shoutcast.pid ]]

It should give you a syntax error, but I doubt if it would cause the behavior you are describing.

Last edited by vbe; 12-17-2013 at 06:41 PM..
# 7  
Old 12-18-2013
Yes scrutinizer I am fussy on the orthodoxy side ... thats because in older times HP-UX was very strict in ksh , what could run on aix 4.3 may not on hpux10... and so I had the habit to be very strict myself and test first on hpux hehe...
Now about our friend who corrected for me ( was and still am very busy ) I took the time to test the script:
modified a bit the script and got:
Code:
n12:/sm/cron/bin/wks/test $ whats_wrong stop
this is line 3
whats_wrong[4]: 0403-057 Syntax error at line 4 : `(' is not expected.


So I looked again at the script and corrected it:
Code:
#!/bin/sh

echo this is line 3
fstop() 
{
        echo "Killing old shoutcast servers in $1"
        #       for oldpid in `ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6`
        #       do
        #               kill -9 $oldpid
        #       done
        #       rm -f $HOME/$1/shoutcast.pid
        read kyb
}


fstart()
{
        servcount=0
        for cfile in `ls $HOME/$1`
        do
                echo -n $cfile
                echo -n " -> "
                #grep ^RelayServer /etc/shoutcast/$cfile
                grep ^RelayServer $HOME/$1/$cfile
                # This is the line where we actually run the shoutcast program!
                #sudo -u nobody /home/shoutcast/sc_serv /home/shoutcast/$cfile > /dev/null &
                $HOME/$1/sc_serv $HOME/$1/$cfile > /dev/null &
                servcount=`expr $servcount + 1`
        done
        #Create the pid file...
        ps -A | grep "$1" | grep "sc_serv" | cut -c 0-6 > $HOME/$1/shoutcast.pid
        #Done now!
        echo "Started $servcount servers in $1."
}


fcreat()
{
        if [[ -d "$1" ]]
        then
                echo "ERROR: STREAM $1 already exists !!"
        else
                mkdir -p $HOME/$1
                cp -f sc_serv $HOME/$1/.
                touch $HOME/$1/sc_serv.cfg
                echo "Creating the CONFIG file $HOME/$1/sc_serv.cfg..."
                echo "Enter MaxUser: "
                read listener
                echo "Enter Password: "
                read pass
                echo "Enter PortBase: "
                read port
                echo "Enter AdminPassword: "
                read apass

                echo "MaxUser=$listener" > $HOME/$1/sc_serv.cfg
                echo "Password=$pass" >> $HOME/$1/sc_serv.cfg
                echo "PortBase=$port" >> $HOME/$1/sc_serv.cfg
                echo "LogFile=sc_serv.log" >> $HOME/$1/sc_serv.cfg
                echo "RealTime=1" >> $HOME/$1/sc_serv.cfg
                echo "ScreenLog=1" >> $HOME/$1/sc_serv.cfg
                echo "ShowLastSongs=10" >> $HOME/$1/sc_serv.cfg
                echo "W3CEnable=Yes" >> $HOME/$1/sc_serv.cfg
                echo "W3CLog=sc_w3c.log" >> $HOME/$1/sc_serv.cfg
                echo "SrcIP=ANY" >> $HOME/$1/sc_serv.cfg
                echo "DestIP=ANY" >> $HOME/$1/sc_serv.cfg
                echo "Yport=80" >> $HOME/$1/sc_serv.cfg
                echo "NameLookups=0" >> $HOME/$1/sc_serv.cfg
                echo "AdminPassword=$apass" >> $HOME/$1/sc_serv.cfg
                echo "AutoDumpUsers=0" >> $HOME/$1/sc_serv.cfg
                echo "AutoDumpSourceTime=30" >> $HOME/$1/sc_serv.cfg
                echo "TitleFormat=%s" >> $HOME/$1/sc_serv.cfg
                echo "PublicServer=default" >> $HOME/$1/sc_serv.cfg
                echo "AllowRelay=Yes" >> $HOME/$1/sc_serv.cfg
                echo "AllowPublicRelay=Yes" >> $HOME/$1/sc_serv.cfg
                echo "MetaInterval=32768" >> $HOME/$1/sc_serv.cfg
        fi
}


case $1 in
        'start')
                if [[ ! -e $HOME/$2/shoutcast.pid ]]
                then
                        fstart $2
                        if [[ -e $HOME/$2/shoutcast.pid ]]
                        then
                                echo "Shoutcast $2 Startup...... [SUCCESS]"
                        fi
                else
                        echo "Shoutcast $2 Startup...... [FAILED]"
                fi
                ;;
        'restart')
                fstop $2
                sleep 4
                fstart $2
                if [[ -e $HOME/$2/shoutcast.pid ]]
                then
                        echo "Shoutcast $2 Startup...... [SUCCESS]"
                fi
                ;;
        'stop')
                if [[ -e $HOME/$2/shoutcast.pid ]]
                then
                        fstop $2
                        echo "Shoutcast $2 shutdown...... [SUCCESS]"
                else
                        echo "There are no registered shoutcast servers running right now in $2. Attempt
ing to kill anyways."
                        fstop $2
                fi
                ;;
        'creat')
                fcreat $2
                if [[ -d "$2" ]]
                then
                        echo "Shoutcast $2 folder created...... [SUCCESS]"
                else
                        echo "Shoutcast $2 folder created...... [FAILED]"
                fi
                ;;
        *)
                echo "Usage: sh ./shoutcast.sh (start|stop|restart|creat) (FOLDER_NAME)"
                ;;
esac

I have no means of testing but should work now...
IMHO it is NEVER a good idea to give to functions the names of argument you expect...
This is what I get now:
Code:
n12:/sm/cron/bin/wks/test $ whats_wrong stop
this is line 3
There are no registered shoutcast servers running right now in . Attempting to kill anyways.
Killing old shoutcast servers in

Dont forget to remove my comments in ftop function and the read kyb...

Last edited by vbe; 12-18-2013 at 12:18 PM.. Reason: code got mangled had to start all again...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Whats wrong with this if-else

hi whats wrong in below?? CHECK=M10; if ; then echo "hello hi"; else echo "how are u hello hi"; fi I am getting error as ./test.sh: line 2: ' ./test.sh: line 2: M10: command not found ./test.sh: line 2: M10: command not found ./test.sh: line 2: M10: command not found (8 Replies)
Discussion started by: skyineyes
8 Replies

2. Homework & Coursework Questions

Whats wrong with the following

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: ls -ld htdocs drwxr-x--- 3 root root 8192 2006-11-19 10:41 htdocs How would a host administrator... (1 Reply)
Discussion started by: Larry_1
1 Replies

3. OS X (Apple)

Whats wrong with this shell script!!!!!

hi guys can you tell me if anything is wrong with this script, seems reasonable to me but somehow never works. Script redacted for being too explicit (2 Replies)
Discussion started by: Freddo
2 Replies

4. Shell Programming and Scripting

Whats wrong with my script?

I am trying to find a value within a properties file and declare it into a variable. Script below. I want the "memSize" to be the branch from the properties file. Right now it always tells me "Not found" What am I doing wrong? #!/bin/sh memsize =''; memSize=`sed '/^\#/d'... (8 Replies)
Discussion started by: vsekvsek
8 Replies

5. UNIX for Dummies Questions & Answers

Whats wrong in the script?

if then if then echo "fst argument is $1 " else if then "fst argument is $1" fi fi fi Can anyone tell me. My requirement is tht pass a string .. Check whether it contains "-". If yes then check if it... (1 Reply)
Discussion started by: nehagupta2008
1 Replies

6. Shell Programming and Scripting

tell me whats wrong with this

#! /bin/bash USAGE=" | ] if then echo "$USAGE" exit 1 fi while getopts lb: OPTION do case $(OPTION)in a) echo Hi there! exit 2;; b) echo hello o) OARG=$OPTARG;; \?)echo "$USAGE" ;; exit 2;; esac done shift `expr... (1 Reply)
Discussion started by: nadman123
1 Replies

7. Shell Programming and Scripting

tell me whats wrong in this?

#! /bin/bash head -5 $1 echo "remove $1 ?" read answer if then echo invalid answer elif rm $1 echo "$1 is deleted" elif then echo file is not deleted else echo "invalid answer" fi What i really want this to do is to ask to delete the file or not..it says something wrong... (1 Reply)
Discussion started by: nadman123
1 Replies

8. UNIX for Advanced & Expert Users

Whats wrong in this Script ???

PATH="/clocal/mqbrkrs/user/mqsiadm/sanjay" MAIL_RECIPIENTS="xyz@abc.com" Subject="File accessed in last minutes:" find $PATH -type f -amin -1 > temp.txt.$$ cat temp.txt.$$ | \ while read line do fuser -uV $line >> tempmail.txt done cat "$tempmail.txt" | mailx -s "$Subject"... (4 Replies)
Discussion started by: varungupta
4 Replies

9. Shell Programming and Scripting

Whats wrong with this script?

Hi all, #!/bin/ksh BIN=/interface/Gunner age=$1 directory="$2" && directory=. cd "$directory" || exit 1 from=`$BIN/today -$age` cd $BIN for i in `cat filestoarchive.txt`;do cd $i find . -mtime 14 | grep -v '.tar$' | $BIN/dttmfilter | awk '$1<="'$from'"{ print;};' | \ done (2 Replies)
Discussion started by: kayarsenal
2 Replies

10. Shell Programming and Scripting

Whats wrong with this 5 line script!

Hi #!/bin/sh user=$1 if " -eq 0 ] echo "No" else echo "Yes" fi I'm not quite sure whats wrong with this but I know its something silly. Any ideas? Thanks (9 Replies)
Discussion started by: c19h28O2
9 Replies
Login or Register to Ask a Question