1

Below is my shell script which I am using to create a PIE Graph.

#! /bin/bash

TEMP=$(mktemp -t chart.html)
QUERY1=36
QUERY2=64
cat > $TEMP <<EOF
<html>
  <head>
    <!--Load the AJAX API-->
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">

      // Load the Visualization API and the piechart package.
      google.load('visualization', '1.0', {'packages':['corechart']});

      // Set a callback to run when the Google Visualization API is loaded.
      google.setOnLoadCallback(drawChart);

      // Callback that creates and populates a data table,
      // instantiates the pie chart, passes in the data and
      // draws it.
      function drawChart() {

        // Create the data table.
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Title');
        data.addColumn('number', 'Value');
        data.addRows([
          ['Error Percentage', $QUERY1],
          ['No Error Percentage', $QUERY2]
        ]);

        // Set chart options
        var options = {'title':'Errors',
                       'width':400,
                       'height':300};

        // Instantiate and draw our chart, passing in some options.
        var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
        chart.draw(data, options);
      }
    </script>
  </head>

  <body>
    <!--Div that will hold the pie chart-->
    <div id="chart_div"></div>
  </body>
</html>
EOF

# open browser
case $(uname) in
   Darwin)
      open -a /Applications/Google\ Chrome.app $TEMP
      ;;

   Linux|SunOS)
      firefox $TEMP
      ;;
 esac

Problem Statement:-

I saved the above file as chart.sh. And whenever I am trying to run the above chart.sh file as sh -x chart.sh

I always get the error as-

syntax error at line number 3: `TEMP=$' unexpected

But when I try to run the above sh file as-

bash -x chart.sh

then I don't get any error. Why is it so? Is there anything wrong in my shell script and suppose If I need to run it like sh -x chart.sh always then what I need to make changes in my shell script?

I am running SunOS.

AKIWEB
  • 19,008
  • 67
  • 180
  • 294
  • What "sh" are you running it with? And what version of SunOS/Solaris? – Random832 Aug 14 '12 at 00:07
  • How can I find the version name of SunOS? When I did `uname -a`. I got something like this- `bash-3.00$ uname -a SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc ` – AKIWEB Aug 14 '12 at 00:10
  • Your /bin/sh is not POSIX compatible. – jordanm Aug 14 '12 at 00:11
  • So that means I cannot run my above shell script as `sh -x chart.sh`. But any other simple script that I have written, I can run it by `sh -x chart.sh`. :-/ – AKIWEB Aug 14 '12 at 00:13
  • Do you have something like a /usr/xpg4/bin/sh? – Random832 Aug 14 '12 at 00:15
  • Solaris is supposed to have a POSIX `/usr/xpg4/bin/sh` so if you put `/usr/xpg4/bin` at the beginning of your `$PATH` then it should work. Or you can learn to write *real* portable shell scripts. Backquotes are portable to the real Bourne shell. `$(...)` was a late addition. – Alan Curry Aug 14 '12 at 00:19
  • Yes I have that `/usr/xpg4/bin/sh`. – AKIWEB Aug 14 '12 at 00:22
  • @AlanCurry: A *later* addition, perhaps, but it's been around for a *long* time. Bash 2.05b has it and that's Copyright 2002. – Dennis Williamson Aug 14 '12 at 01:15
  • Long after the Solaris /bin/sh feature set was carved in stone – Alan Curry Aug 14 '12 at 04:50

2 Answers2

3

sh and bash can point to completely different executables. The fact that sh is a symbolic link to bash on certain systems should not make you assume the same is true everywhere. If you need bash, use it explicitly.

EDIT(mpapis): Also note that even when you call bash via sh it does not behave exactly the same.

rid
  • 61,078
  • 31
  • 152
  • 193
  • So that means I cannot run my above shell script as `sh -x chart.sh`? But any other simple script that I have written, I can run it by `sh -x chart.sh`. :-/ – AKIWEB Aug 14 '12 at 00:15
  • @Nevzz03, if `sh -x` doesn't work with one script, it shouldn't work with any other script, since you're running the same `sh`. – rid Aug 14 '12 at 00:18
  • It works with my other script just fine. But with only this script, I am getting the above mentioned error in my question. – AKIWEB Aug 14 '12 at 02:17
  • 2
    Your script contains syntax (namely, the `$(...)`) which is not supported by the old, pre-POSIX `sh` you have. You can substitute backticks `\`...\`` instead if for some reason you want to be able to use it with `sh`. Then you should probably also change the shebang to `#!/bin/sh` if that is really your intent. – tripleee Aug 14 '12 at 04:16
0

See this page: http://docs.oracle.com/cd/E19082-01/819-2252/6n4i8rtus/index.html for information on how to set your PATH variable to call the POSIX-compatible version of sh and other tools.

Random832
  • 37,415
  • 3
  • 44
  • 63