410 likes | 897 Views
BASH Scripting. Intro and Variables. Objectives. Introduce Unix script writing including: introducing variables locality basic I/O Introduce script execution Introduce the .bash_profile file. Overview. Executing Variables creating/assignment accessing list variables (arrays)
E N D
BASH Scripting Intro and Variables
Objectives • Introduce Unix script writing including: • introducing variables • locality • basic I/O • Introduce script execution • Introduce the .bash_profile file
Overview • Executing • Variables • creating/assignment • accessing • list variables (arrays) • exporting • read only • eliminating • predefined • I/O • read • echo (write)
Example of First Script -bash-3.2$cat helloworld # show contents of script echo Hello World!! # display Hello World!! on screen -bash-3.2$. helloworld # execute script (note the period space (. ) prior to the script name) Hello World!!
Steps for scripts visfile requires execute permission sfile chmodsfile requires path PATH+=:dir .sfile sourcesfile bashsfile shsfile ./sfile sfile
Executing a Script 1 – requires execute mode 2 – runs in separate shell. Variables set have no affect outside of script even with export but exported variables are exported to sub scripts 3 – requires PATH variable to be set to point to current directory (.)
Shell Positional Parameters Parameters are sent by entering values when the shell is called.
Shell Positional Parameters Assuming a script called params was called using the parameters a b c: paramsa b c
set • Parameters may be set within a script using the set command • Example: setw x y z will set parameters 1 through 4 to “w” “x” “y” and “z”, even if they were set to values when the shell was called. If fewer variables were set than were called the “extra” variables are lost • Example: if a script called paramsset is called using: paramsset a b c d and inside paramsset is the command: setx y z x, y, and z are the only values available (“d” is lost)
Variables • creating • must begin with a character (a-z,A-Z) • may contain alphanumeric characters (a-z,A-Z,0-9) and the underscore character(_) • case sensitive, thus Ron is different than ron • assignment • var=val NOTE: no spaces surrounding = • var=“space delimited vals”
Viewing Variables Set • Show all variables set: set
Variables • accessing • $var - shows value of variable • ${var}othertext – ensures that var is the substitution variable (not varothertext) • ${var-val} - shows value of var if defined otherwise uses val (if val includes spaces, it must be enclosed in “; if val is a command must be inclosed in `)
Variable Examples Please note the ` is called a grave accent and is NOT a single quote. It is located above the tab key, on the same key as the tilde ~. Do not confuse this with the single quote (next to the Enter key).
More Variable Substitution • ${var:opval}
Variable pattern matching# and % • Pattern-matching operators are useful for stripping off components of pathnames, such as directory prefixes and filename suffixes. • An easy way to remember the usage is to think of how we write percents. For example 75% the number (#) 75 precedes and the percent sign (%) follows • Doubling the symbol (## or %% indicates repeated deletions until pattern is found.
# and % Examples An example that shows how all of the operators may be used. Assume that the variable path has the value: /home/student/project/Class.Name.java
Variables • Exporting: Variables are considered “local” to the script, that is, a variable used in a particular script has no affect outside of that particular script. The export command will allow the variable to be used in a child script. A child script is a script that has been started from another script (the parent). It is important to note that exporting only goes from parent to child not from child to parent.
Variable exporting ParentScript: name1=Ron name2=Sue export name2 shChildScript echo $name2 ChildScript: echo $name1 echo $name2 name2=Bob
readonlyVariables • declaring a value readonly makes it a constant, for example: name=Ron readonlyname echo $name name=Sue echo $name results in the following error: readonly: line 4: name: readonly variable
eliminating Variables • var= simply removes the value (sets it to null) of the variable NOT the variable itself • unsetvar removes the variable altogether
PS1, PS2 variables (selected*) Example: PS1=‘\s-\v$’ shows -bash-3.2$, which is the current default. *For a complete list of variables, see pages 365-366 in Unix in a Nutshell
I/O • read : allow the user to enter data into a variable from standard input (keyboard) • echo : displays contents onto standard output (display)
.bash_profile • A user may have a hiddenfile called .bash_profile • This file is really a script that is automatically called when one logs in to the machine. • .bash_profile is responsible for setting up the Unix environment specifically for you. The Windows/DOS equivalents for this was autoexec.bat and config.sys • A key variable in the .bash_profile is the PATH variable. This variable provides Unix with a search path for locating files
What to do if you don’t have a .bash_profile file. • Search in your home directory for the .bash_profile file using: ls –a .bash_profile • If it does not exist, copy the /etc/profile file to your home directory renaming it .bash_profile This file is extremely important, so be sure to save a copy of it, prior to altering it, in order to restore it, should things go wrong.
Modifying the PATH variable • To modify the PATH variable to add a directory to the existing PATH use the following commands: PATH+=“:newpath” • In Unix the colon (:) is a separator between different paths. In Windows/DOS the separator is a semi-colon (;). Be extremely careful in modifying the PATH, as many commands will no longer work if the PATH is corrupted.
I/O (read) • format: read [options] var1[ var2…] • Options (selected) • -p ‘string’ : prompt with a string (no need to use an echo for prompting) • -s : hide input, good for password entries • -tseconds : Wait for input specified number of seconds, if time expires do not set variables
I/O (echo) • format: echo [options] [strings] • Options: • -e : Enable escape character interpretation (see next slide) • -n : Do not append a newline to the output (useful for concatenating strings or when prompting for a read and read to take place on same line as prompt • -E : disable interpretation of escape characters
Prompt and Read Examples -bash-3.2$cat helloworld #read name from keyboard read -p 'Enter name: ' name # print out hello world echo Hello $name!! -bash-3.2$. helloworld Enter name: Sue Hello Sue!! -bash-3.2$cat helloworld #prompt for name echo Enter Name: #read name from keyboard read name # print out hello world echo Hello $name!! -bash-3.2$. helloworld Enter Name: Soumyaroop Hello Soumyaroop!!
Escape Characters • the escape character, a backslash (\), allows a different interpretation for the following selected characters: • \a : Audible alert • \b : backspace • \c : continue on same line (same as –n option) • \e : escape character • \f : form feed • \n : newline • \r : carriage return (on some systems \r\n are both required for a new line) • \t : horizontal tab
Review • Introduced Unix script writing including: • introducing variables • locality • basic I/O • Introduced script execution • Introduced the .bash_profile file
BASH Scripting Intro and Variables