?
Solved

how to read special characters in shell script

Posted on 2007-11-26
8
Medium Priority
?
4,296 Views
Last Modified: 2013-12-26
How to read special characters in bash shell?
I need to read 2 file names which could contain special characters, like $ # etc.
I am appreciate someone can help me with this. this code is really make me crazy. Thanks
#!/bin/bash
#Process one file##############
read() {
     tempPoint=0
     line=1
     while [ $line -le $lineCount ]
     do    
	subPoint=`sed -n "$line"p $file | awk '{print $2}'`
        name=`sed -n "$line"p $file | awk '{print $1}'	`
        if [ -n "$name" ]
        then {
        if [ $Name = $name ]
        then
        {
        tempPoint=$subPoint
        }
        fi
        }
        fi
        line=`expr $line + 1`
    done
    if [ $tempPoint -ne 0 ]
    then
    	totalPoint=`expr $totalPoint + $tempPoint`
    fi
}
######main program###############
 
if [ $# -eq 0 ]
then
    echo "no arguments"
    echo
    exit 1
fi
if [ $# -eq 1 ]
then
    echo "no files"
    echo
    exit 1
fi
if [ $# -eq 2 ]
then
    echo "no files"
    echo
    exit 1
fi
Name=$1
shift
totalPoint=0
total=0
until [ $# -eq 0 ]
do
    if [ -f "$1" ]
    then
     {
     file=$1
     total=`expr $total + 1`
     lineCount=`wc -l < $file`
     read
    }
    fi
    shift
done
 
if [ $total -eq 0 ]
then
{
   echo "no files"
   echo
}
else
{
   echo $Name "AVG:" `expr $totalPoint / $total`
}
fi

Open in new window

0
Comment
Question by:matchge
  • 3
  • 3
7 Comments
 
LVL 48

Expert Comment

by:Tintin
ID: 20355385
What problem are you having?  Works fine for me.  Remember that you should quote filenames with funny characters, eg:

script 'file1$#' 'file2$%'
0
 

Author Comment

by:matchge
ID: 20355465
Thank you very much.
But what if I want to input without the single quote?
Thanks for ur comments.
0
 
LVL 48

Expert Comment

by:Tintin
ID: 20355514
Very much depends on your shell.

For example in bash, you can set the GLOBIGNORE environment variable to ignore various glob characters such as * and ?, eg:

export GLOBIGNORE=*:?

However, for $, you need to escape it with either single quotes or backslash, eg:

script file1\$#
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 

Author Comment

by:matchge
ID: 20355600
So,you mean I need to consider all the possibility $,#,\,'," etc? Is there any fast and convince way to handle them all?
Thank you ~~~
0
 

Author Comment

by:matchge
ID: 20355642
where can I find out how to handle other special characters? like #,space,',",\ ?
0
 
LVL 48

Accepted Solution

by:
Tintin earned 500 total points
ID: 20355824
Using single quotes is the most reliable, simple way of specifying meta-characters.  If the data also includes a single quote, you need to use a backslash, eg:

'abc\'def'
0
 
LVL 51

Assisted Solution

by:ahoffmann
ahoffmann earned 500 total points
ID: 20397628
> Is there any fast and convince way to handle them all?
simply prefix each character by \  (backslash)
Otherwise you have to use quotes or a shell which has no meta characters.
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In real business world data are crucial and sometimes data are shared among different information systems. Hence, an agreeable file transfer protocol need to be established.
Make the most of your online learning experience.
Introduction to Processes
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

593 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question