Learn How to Write a Generic Unix Shell Script in 4 Easy Steps with ltxprc.sh

  • Thread starter Thread starter Surrealist
  • Start date Start date
  • Tags Tags
    Shell Unix
Click For Summary
To create a generic Unix shell script named "ltxprc.sh" that runs a series of commands, the script should be structured to accept a filename as a command line argument. The user can define the filename in the script using the line "filename=$1", allowing the script to be executed with a command like "sh ltxprc.sh file.tex". To enhance usability, the script should be made executable with the command "chmod" and include a shebang line at the top: "#!/bin/sh". This line indicates to the system that the script should be run using the shell specified. The shebang is not treated as a comment by the exec function, which recognizes it as a directive to determine how to execute the script. This functionality allows for streamlined execution without needing to specify the shell each time.
Surrealist
Messages
47
Reaction score
0
I have never written a shell script, but I am trying to learn. I want to make a generic Unix shell script that will allow me to run four commands in a row... something like this...

latex $filename
bibtex $filename
latex $filename
latex $filename

I would like to call the script "ltxprc.sh".

How would I make this file work for any filename?

For instance, if my file name were "paper", would I run a command like...

sh ltxprc.sh

where do I input the filename?
 
Technology news on Phys.org
First, you need to modify your script so it accesses the command line arguments sent to the script:

filename=$1

You pass the filename on the command line:

sh ltxprc.sh file.tex

Even better is to make the shell script executable via chmod. You will need to add a "shebang" line to the very front of your script:

#!/bin/sh

When you do that, all you need to say is

ltxprc.sh file.tex
 
Thanks for the help. That was probably the most useful response I have ever received from a message board.

I got to ask... why is it that the #!/bin/sh works? I thought that the # symbol meant "comment out" that which follows.
 
Surrealist said:
I got to ask... why is it that the #!/bin/sh works? I thought that the # symbol meant "comment out" that which follows.

The # symbol is indeed a comment to the shell. The shell, however, is not what runs runs programs (directly, that is). The exec family of functions are what run programs on a Unix machine. The first thing exec does when asked to run a program is read the first two bytes of the program. When those first two bytes are "#!", exec does something quite special: It uses the line to indicate what program should be executed to run the script file. For example, you used #!/bin/sh . The #! tells exec this is an executable script. The exec invokes /bin/sh to run the script. Now /bin/sh reads lines from the script. Now we get back to your question: the first line is just a comment; /bin/sh does nothing with it.

For more info, see http://homepages.cwi.nl/~aeb/std/hashexclam.html" .
 
Last edited by a moderator:
Learn If you want to write code for Python Machine learning, AI Statistics/data analysis Scientific research Web application servers Some microcontrollers JavaScript/Node JS/TypeScript Web sites Web application servers C# Games (Unity) Consumer applications (Windows) Business applications C++ Games (Unreal Engine) Operating systems, device drivers Microcontrollers/embedded systems Consumer applications (Linux) Some more tips: Do not learn C++ (or any other dialect of C) as a...

Similar threads

  • · Replies 11 ·
Replies
11
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
Replies
33
Views
3K
  • · Replies 9 ·
Replies
9
Views
1K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
12K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 13 ·
Replies
13
Views
2K
Replies
1
Views
5K