Results 1 to 5 of 5

Thread: Calling functions "command not found" error.

  1. #1
    Join Date
    Dec 2010
    Beans
    29

    Unhappy functions "command not found" error / Here Documents

    I wrote the following script to organize my music files and to learn a bit more about bash.

    My problem is, now that I'm almost over the first version, that functions which are surely spelled correctly and were recognized in the past, are giving me the "command not found" error!

    Sorry for posting the whole script but I'm far from pinpointing the problematic code...
    Code:
    #!/bin/bash
    
    
    # This is a script for moving tagged files into organized directory trees.
    
    ##### Variables
    
    filenum=0
    dirnum=0
    
    
    ##### Functions
    
    function move_files
    {
    	path_tree="$out_dirkry/$gentre/$artist/$album"
    	file_nm=$(echo $track_num-$title | sed 's/ /_/g')
    	path_tree=$(echo $path_tree | sed 's/ /_/g')
    
    	if [ $_tmcn_ = "t" ]; then
    		echo "Testing : $new_file"
    		echo "mv" "$new_file" "$path_tree/$file_nm.mp3" # EXTENTION WAY???
    	elif [ $_tmcn_ = "m" ]; then
    		echo "Moving : $new_file"
    		mkdir -p "$path_tree"
    		mv "$new_file" "$path_tree/$file_nm.mp3"
    	elif [ $_tmcn_ = "c" ]; then
    		echo "Copying : $new_file"
    		mkdir -p "$path_tree"
    		cp "$new_file" "$path_tree/$file_nm.mp3"
    	elif [ $_tmcn_ = "n" ]; then 
    		echo -e "Error in line #32\\n"; exit 1
    	else 
    		echo -e "Error in line #34\\n"; exit 1
    	fi 
    
    }	# end of move_files
    
    function count_files
    {
    	countf=$(find $dirkry -type f | wc -l) # just counts lines
    	countd=$(find $dirkry -type d | wc -l) #        -"-
    	filenum=$(($filenum + $countf))
    	dirnum=$(($dirnum + $countd))
    
    	if [ $_tmcn_ = "n" ]; then
    		test_file
    	fi
    	
    }	# end of count_files
    
    function create_dirkry
    {
    	echo -ne \\n"$out_dirkry does not exist. Create it? (y/n) :"
    	read yesno
    	case $yesno in
    		y | Y )		mkdir $out_dirkry 
    				if [ $? = 0 ]; then
    					test_file
    				else
    					echo "Unable to create output directory."
    					echo "Exiting program."; exit
    				fi
    				;;
    		n | N )		yes_prsd
    				;;
    		* )		echo -e \\n "\"$yesno\" is not a valid input."; create_dirkry
    	esac
    }	#end of create_dirkry
    
    function one_out_dir
    {
    	innu=0
    
    	for indir in $out_dirkry; do
    		innu=$(($innu + 1))
    	done
    
    	if [ "$innu" != "1" ]; then 
    		echo -e \\n"You may specify only one directory."; yes_prsd
    	fi
    }	# end of one_out_dir
    
    function yes_prsd
    {
    	echo -ne \\n"Give path for output directory. > "
    	read out_dirkry
    		one_out_dir	
    	if [ -d $out_dirkry ]; then 
    		test_file
    	else 
    		create_dirkry
    	fi
    }
    function pro_sid
    {
    	echo -ne \\n"Will now process "$filenum" files in "$dirnum" directories. Proceed? (y/n) :"
    	read yesno 
    	case $yesno in
    		y | Y )		yes_prsd
    				;;
    		n | N )		echo -e \\n"Exiting program."\\n; exit 1
    				;;
    		* )		echo -e \\n "\"$yesno\" is not a valid input."; pro_sid
    	esac
    }	# end of pro_sid
    
    function test_file
    {
    	unpro_num=0
    	pro_num=0
    	find $dirkry -type f | while read new_file; do
    
    		mp3info -x "$new_file" > /home/$USER/temp_tech 2>&1
    
    		if [ $? = 0 ]; then 
    			if [ $_tmcn_ = "n" ]; then
    				pro_num=$(($pro_num + 1))
    				echo "$new_file is valid"
    			else readtag_file
    			fi
    
    		else 
    		unpro_num=$(($unpro_num + 1))
    		echo -e \\n"$new_file is not valid"
    
    	fi
    	
    	rm /home/$USER/temp_tech
    
    	done
    
    	if [ $_tmcn_ = "n" ]; then
    		menu_count
    	fi
    }	#end of test_file
    
    function readtag_file   # This requires the mp3info package to be installed!!
    {
    	num_id="0"
    	ORIG_IFS="$IFS"
    	IFS=","
    	
    	for organ_tree in $(mp3info -p "%g,%a,%l,%n,%t" "$new_file"); do
    		num_id=$(($num_id + 1))
    	
    		case $num_id in
    
    			1 )	if [ -n "$organ_tree" ]; then
    					gentre="$organ_tree"
    				else
    					gentre="unknown"
    				fi
    				;;
    			2 )	if [ -n "$organ_tree" ]; then
    					artist="$organ_tree"
    				else
    					artist="unknown"
    				fi
    				;;
    			3 )	if [ -n "$organ_tree" ]; then
    					album="$organ_tree"
    				else
    					album="unknown"
    				fi
    				;;
    			4 )	if [ -n "$organ_tree" ]; then
    					track_num="$organ_tree"
    				else
    					track_num="#"
    				fi
    				;;
    			5 )	if [ -n "$organ_tree" ]; then
    					title="$organ_tree"
    				else
    					title="unknown"
    				fi
    				
    				move_files
    				;;
    			* )	echo "Error! More tags than format alows."; exit 1
    		esac
    	
    	done
    
    	IFS="$ORIG_IFS"
    } 	# end of reatag_files
    
    function menu_count
    {
    	cat << _EOF_
    	Total files = $filenum
    	Total directories = $dirnum
    	    _________________
    
    	Files that can be processed = $pro_num
    	Files that can't be processed = $unpro_num
    	
    	_EOF_
    
    	exit
    }	# end of menu_count
    
    function beg_in
    {
    	echo -ne \\n"Give path(s) to input directory. > "
    	read paths
    
    	for dirkry in $paths; do
    		if [ -d $dirkry ]; then
    			echo -e \\n"$dirkry is a valid path."
    			count_files; pro_sid
    		else
    			echo -e \\n"$dirkry is NOT a valid path!\\nTry again."
    			beg_in
    		fi
    	done
    }	# end of beg_in
    
    function short_menu
    {
    	if [ $file_type = "video files" ]; then
    		echo -e \\n"Video files are not supported as of yet!\\n"; exit 1
    	elif [ $file_type = "music files" ]; then
    		case $_tmcn_ in 
    			t )	beg_in
    				;;
    			m )	beg_in
    				;;
    			c )	beg_in
    				;;
    			n )	beg_in
    				;;
    			* )
    		esac
    	fi
    }
    
    function sub_sp_menu
    {
    	cat<<_EOF_
    -----------------------------------------------------------------------
    	Choose one of the following tasks for $file_type.
    
    		"t"	- For testing files outcome.
    
    		"m"	- For actual moving of files.
    
    		"c"	- For copying of files (recomended)
    
    		"n"	- For printing the total number of files in 
    			  parent directory and the total number of 
    			  files that can be processed and moved.
    _______________________________________________________________________
    _EOF_
    	echo -n " > "
    	read menu_tmcn
    
    	case $menu_tmcn in
    		t | T ) 	_tmcn_="t"
    				;;
    		m | M )		_tmcn_="r"; echo -e \\n"Don't you love your $file_type?\\nBetter choose something else for now ;)"; sub_sp_menu
    				;;
    		c | C )		_tmcn_="c"
    				;;
    		n | N )		_tmcn_="n"
    				;;
    		* )		clear; echo -e \\n"\"$menu_trc\" is not a valid option"\\n; sub_sp_menu
    	esac
    
    }	# end of sub_sp_menu
    
    function splash_menu
    {
    	cat <<_EOF_
    =======================================================================
    	This script moves files from one or more parent directories to
         the choosen output directory and organizes them in subdirectories 
         acording to their tags. Choose one of the following options.
    
    		"v"	- For video files organization.
    
    		"m"	- For music files organization.
    
    		"h"	- For printing help message and exiting.
    _______________________________________________________________________
    
    _EOF_
    	echo -n " > "
    	read menu_vmh
    
    	case $menu_vmh in
    		v | V ) 	file_type="video files"; sub_sp_menu
    				;;
    		m | M )		file_type="music files"; sub_sp_menu
    				;;
    		h | H )		prnt_hlp
    				;;
    		* )		clear; echo -e \\n"\"$menu_vmh\" is not a valid option"\\n; splash_menu
    	esac
    }	# end of splash_menu
    
    function prnt_hlp
    {
    	echo -e \\n"Help is not yet available."\\n; exit
    }	# end of prnt_hlp
    clear
    
    splash_menu
    
    echo
    exit
    I hope that someone will take the time to help me out and I thank you in advance!

    cheers
    g.
    Last edited by stamoulohta; January 21st, 2011 at 10:05 AM. Reason: better indexing

  2. #2
    Join Date
    Feb 2007
    Location
    Romania
    Beans
    Hidden!

    Re: Calling functions "command not found" error.

    You have to remove the extra tab before the here document's delimiter (_EOF_) in the menu_count function.
    Check out:
    Code:
    man bash | less +/"Here Documents"
    Last edited by sisco311; January 21st, 2011 at 12:28 AM.

  3. #3
    Join Date
    Feb 2007
    Location
    Romania
    Beans
    Hidden!

    Re: Calling functions "command not found" error.

    oops. double post!
    Last edited by sisco311; January 21st, 2011 at 12:19 AM.

  4. #4
    Join Date
    Dec 2010
    Beans
    29

    Re: Calling functions "command not found" error.

    Wow! I would't catch this even in my wildest dreams by myself!

    sisco, i thank you very much for taking the time to answer both my threads. And is very nice from you to always direct me to information I should read (or should have read ^^).

    Most of it works now. I'll change it to "SOLVED" and to a different title so it can be indexed more properly. -if the site lets me

    best regards
    g

  5. #5
    Join Date
    Feb 2007
    Location
    Romania
    Beans
    Hidden!

    Re: Calling functions "command not found" error.

    You are welcome!

    Yeh, debugging is harder than coding and debugging your onw code is even harder.

    For some tips and techniques check out the debugging section at http://mywiki.wooledge.org/BashGuide/

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •