Linux Classes
Linux Classes
Share This With a Friend
LINUX CLASSES - PROGRAMMING

Linux Shell Scripts

How Do I Run a Linux Shell Script?

So how do you run this little wonder of technology? In DOS, all you have to do is name a file with a .bat extension and it'll be recognized as an executable file--but not so with Linux. Since Linux attaches no meaning to file extensions, you have to mark the file as executable by using the chmod command, like this: $ chmod +x deltemp

The x marks the file as executable; if you list the permissions for the deltemp file afterward, you will see the x in position four, confirming this:

$ ls -l deltemp
-rwx------ 1 hermie other 55 Feb 19 14:02 deltemp

If you want other users to be able to run this script, give them both read and execute permission, like so:

$ chmod ugo+rx deltemp
$
ls -l deltemp
-rwxr-xr-x 1 hermie other 55 Feb 19 14:04 deltemp

Now the permissions show that any user can view or execute the deltemp script, but only you can modify it. To run the script, just enter its name at the command prompt, prefixed with ./ as shown here:

$ ./deltemp

Note: If the current directory is in the PATH environmentvariable, you can omit the ./ before the name.

But there's one important thing you should know about running shell scripts this way. When you enter the shell script name and tell Bash to run it, a subshell is created for the execution of the script. This subshell inherits all the shell environment variables, including the current directory, but you lose any changes made to that environment when the script terminates.

What's the practical meaning of this? Well, you might expect that the current directory would be /tmp after you've run the deltemp script, but it's not. You'll still be in hermie's home directory. And if we had set an environment variable inside the script, its value would be good only during the execution of the script. Here's an example to demonstrate this point. Create an executable setvar script with these lines:

PS1='My Prompt: '
echo $PS1

Now watch how the values of the current directory and the PS1 variable change:

$ PS1='Bash Me! '
$
echo $PS1
Bash Me!
PS1 before setvar.
$
setvar
My Prompt:
PS1 during setvar.
$
echo $PS1
Bash Me!
PS1 after setvar.

It looks like this script is absolutely useless for the intended purpose of setting the environment variable. But a little trick will make it work the way you want. Run the script by prefixing the name with a dot and a space, like so:

. setvar

This tells Bash to run the setvar script in the current shell environment, instead of creating a temporary subshell. Verify for yourself that the command prompt does in fact change to My Prompt: after running this script.

Previous Lesson: Linux Shell Scripts
Next Lesson: Shell Script Variables

[ RETURN TO INDEX ]



Comments - most recent first
(Please feel free to answer questions posted by others!)

T.lavakumar (04 Mar 2013, 10:20)
How can i create and run a shell program in linux terminal................ please any one send the steps...
mansi bhowmick (06 Nov 2012, 14:24)
I am executing bash script from C program and exporting some variables but value of this exported variable are not actually exported as i checked with echo command after executing the C program.So C program is also unable to read this values using getenv command.

kindly help!!
sanoop (19 Mar 2012, 05:30)
please send the shell scripts examples
Vadiraj (20 Jan 2012, 00:55)
I'm using some software for my work.
When I invoke that software, it is invoking from my home location.
While working, software saves lot of intermediate files at my home location, creating lot of garbage at home.
I wanted to know is there any way to create these intermediate files at some other location other than home.

Thanks in advance.
gayan (04 Jan 2012, 04:38)
Hi bob thanks a lot for giving me the best understanding about shell scripting..
suni (03 Jan 2012, 06:08)
i want to run a linux script on windows machine which it should login to linux machine and fetch the details and output should redirected to windows machine....is it possible?
omar (29 Aug 2011, 04:39)
Hi Bob,
Fantastic Linux website!!! is there anyway to have in a pdf format?
I was wondering if there is a chance for bash lessons
Many thanks for the site
Norm (15 Jul 2011, 01:08)
Thanks so much Bob!
miss ann (04 Jul 2011, 23:24)
my i get sample script for run fortran 90 at linux...
Sagar (09 Jun 2011, 00:11)
I Want learn Linux please help me
Nittin Kumar (29 Apr 2011, 08:50)
Same method you can execute the perl scrip .
Jay Shah (10 Feb 2011, 18:06)
What is the command to execute a perl script on a Linux server
Jayati Tiwari (14 Jan 2011, 09:12)
Bob .. your suggested command helped me too .. thanks a lottt ....
Uche (07 Dec 2010, 16:41)
i have a file (myfile) containing functions.
execting the file with ./myfile or using bash myfile
failed to make the functions available to the shell
but (. myfile) worked. why???
J. van der Meer (23 Nov 2010, 14:21)
Thanks Bob
Your explanation of the different commands, shell scripts and others are a releave.
Even I can learn to do the trics now.
Thanks once again
Jan
JohnF (04 Oct 2010, 22:32)

Hi Bob

Thanks for the well thought out and planned articles. I have learned more about the inner workings of Linux in a few days by reading your work than I have in the past couple of years reading man pages.
Dhruv (14 Sep 2010, 10:18)
Hi Bob,
Thanks for this in depth tutorial. I am having a similar problem while executing a script with in a script. My original script begins with #!/bin/ksh.
I have two scripts inside it .
1)one is for setting the environment(actually links the Linux box to a repository) for code extraction. It has to be run through .(Dot) scriptname (running in the current shell).

2)Another script is (when both are linked) to work on the extracted stuff.

When i execute these from my own script
#!/binksh
pbsu rootuser
#!/bin/ksh
. firstscript
second script

IT is logging in as rootuser bit not running the other two scripts.

Your help is highly appreciated.
Bob Rankin (21 Aug 2010, 17:46)
@sandeep - That's not enough information to diagnose your problem. Saying "not behaving like root" is like "sometimes my car doesn't work." What specifically is the problem?
sandeep (21 Aug 2010, 09:20)
hi,
i am logging in as root ....
but it is not executing all commands that a root can do.it is displaying as "root#" but not behaving like root..........
any suggestion?
thanks...
niit (20 Aug 2010, 02:44)
thanks for ur tutorial.........
Bob Rankin (02 Aug 2010, 11:13)
Also, the sudo command might be helpful.
Bob Rankin (02 Aug 2010, 11:10)
@Rahul - The su command cannot accept a password, but you could use ssh to connect to localhost, and pass the command. The ssh command can store passwords with ssh-keygen, and eliminate the need to key it in.
Rahul (01 Aug 2010, 12:58)
Hi Bob
can i gave the password in my script automatically for ex.
i want to switch from user rahul to oracle using
su - oracle
through scripting
then how it get the password
us
Kwabena (04 Jul 2010, 13:30)
Hi Bob,

I want to run executables by just typing the name of the executable file instead of typing ./ first (./name). I want to write a shell for this and place it in the /usr/bin directory. Can you give me the code?

Thanks,
Kwabena
Bob Rankin (02 Jun 2010, 06:14)
@hari - That's like cutting off the branch you're standing on... you'll both fall to the ground. You might consider saving the task ID of the first task in a file, then launching the second task as a background task (not nested). Then the second task can read the task ID of the first from the file, and issue a 'kill' command. Still, it seems there is probably a cleaner way to do what you want.
hari (02 Jun 2010, 03:43)
Hi....i've one script nested inside another script...i need to stop the execution of the outer script once an if condition in the inside script is satisfied..how can i stop running this outer script??any command for it???
Bob Rankin (01 Jun 2010, 10:35)
@Dimitris - That can certainly be done. Most likely your script is not running in the correct directory. Try using absolute addressing for the directory in your script.
Dimitris (01 Jun 2010, 03:06)
Hi , i am trying to write a script that executes some commands. i want to have my script in a folder an through the script i want to be able to use the cd command to move into the subfolders. can this be done ? because i use the cd and i receive an error the folder does not exist.
Bob Rankin (14 May 2010, 05:56)
I think if you use su without the -c flag, it opens a new shell and your script is suspended until you return. I don't know what you mean about automating the password.
Albert Sefia (13 May 2010, 07:35)
Sorry about my questions Bob, can i automate password in a linux script? i.e.
passwd albert
......
.....
Albert Sefia (13 May 2010, 07:31)
Thanks so much Bob, it worked exactly as you said. It thus, executes the commands as the other user but returns to the original user afterwards. Is there a way I can remain as the user i switch to?
Bob Rankin (16 Mar 2010, 14:28)
Try this: su - username -c "command1;command2;..."
albert sefia (16 Mar 2010, 12:29)
i wrote a script in Linux. Included in the script was "su - user".
I noticed the script runs until it switches user and then stops. Refusing to execute the commands after the su command. What might be the the problem?

I welcome your comments. However... I am puzzled by many people who say "Please send me the Linux tutorial." This website *is* your Linux Tutorial! Read everything here, learn all you can, ask questions if you like. But don't ask me to send what you already have. :-)

NO SPAM! If you post garbage, it will be deleted, and you will be banned.
*Name:
Email:
Notify me about new comments on this page
Hide my email
*Text:




Copyright © by - Privacy Policy
All rights reserved - Redistribution is allowed only with permission.

Popular Linux Topics

Linux Intro
Linux Files
Linux Commands
Change Password
Copy Files
Linux Shell Basics

Linux Tutorial

Who is Doctor Bob?
What is Linux?
History of Unix
Operating Systems
What's Next?

Linux Basics

Living in a Shell
Root and Other Users
Virtual Consoles
Logoff and Shutdown
Choosing a Shell
The Command Prompt
Wildcards
Command History
Aliases
Redirection
Pipelines
Processes
Stopping a Program
Environment Variables
Help!

Linux Files

The Linux File System
Linux File Names
Linux Directories
Directory Terminology
Navigating the File System
Listing Linux Files
Displaying Linux Files
Copying and Renaming Files
Creating Files and Directories
Deleting Files and Directories
Linux Files - Wildcards
The Nine Deadly Keystrokes
Linux File Permissions
Changing File Permissions

Linux Commands

Important Linux Commands
Changing Your Password
Switching Users
Who is Logged In?
Date and Time
The Echo Command
Spell Checking
Printing Linux Files
Joining Files
Searching for Files
Comparing Files
Task Scheduling
Linking Files

Linux Editors

The Vi Editor
The Emacs Editor
The Pico Editor

Linux Data Manipulation

Slicing & Dicing
Heads or Tails?
Sorting Data
Eliminating Duplicates
Selecting Columns
Selecting Records
Search & Replace
Crunching Data
Finding Files
Pipe Fitting

Linux Shell Programming

Linux Shell Scripts
Executing a Script
Shell Script Variables
Shell Script Logic
Shell Script Looping
Shell Script Debugging

Perl Programming

Perl Basics
Perl Variables
Perl Arguments
Perl Logic
Perl Looping
Perl and Files
Perl Pattern Matching

Linux and Email

Sending Email
Reading Email
Other Mail Commands
Using Pine for Email
The Pine Inbox
Pine Email Basics
Pine Email Folders
Pine for Power Users

Compression and Encoding

Linux File Compression
Archiving With Tar
Compression With Gzip
Compress and Zcat
Zmore and Zless
Zip and Unzip
Encoding and Decoding
Encryption

Linux Does DOS

Accesing DOS Files
Accesing DOS Partitions
Running DOS Programs

Managing Linux

Updating Your Linux System
Installing Packages with RPM
Uninstalling Packages w/ RPM
Upgrading Packages with RPM
Querying Packages with RPM

AltStyle によって変換されたページ (->オリジナル) /