1 / 25

Workbook 6: The Bash Shell

Workbook 6: The Bash Shell. OS515: 2010. Introduction to Bash . The default shell in Red Hat Enterprise Linux is the bash shell The bash shell can be used interactively, or as a powerful scripting language

thyra
Download Presentation

Workbook 6: The Bash Shell

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Workbook 6: The Bash Shell OS515: 2010

  2. Introduction to Bash • The default shell in Red Hat Enterprise Linux is the bash shell • The bash shell can be used interactively, or as a powerful scripting language • Upon startup, bash executes commands found in the ~/.bashrc file, allowing users to customize their shell • The bash shell maintains a history of the command lines that it executes. Command lines can be retrieved from the history using various history expansions that begin with "!"

  3. Command History [blondie@stationblondie]$ history 1 ls -l /home/ 2 ls -ln /home/ 3 exit 4 exit 5 id ... 167 mv rhyme stuff/ 168 ls –Rli 169 exit 170 171 exit 172 history

  4. Multiple Commands and Commands in a Subshell Multiple commands can be separated with a ; [elvis@stationelvis]$ cd /etc/X11; lsapplnkprefdmsysconfigxinitxorg.conffsserverconfigtwmXmodmapXresources [elvis@station X11]$ [elvis@stationelvis]$ (cd /etc/X11; ls) applnkprefdmsysconfigxinitxorg.conffsserverconfigtwmXmodmapXresources [elvis@stationelvis]$

  5. An Introduction to Shell Scripts • The first line of your script must specify which interpreter to send instructions to • Before you can run a script, you must enable the "executable" permission on it (otherwise, it's just a text file) • If you created a script called foo.sh in your home directory and then just typed foo.sh you would get a "no such file or directory" error

  6. Basic shell script [student@station ~]$ cat ~/bin/wdate.sh #!/bin/sh date w [student@station ~]$ chmodu+x ~/bin/wdate.sh [student@station ~]$ wdate.sh Thu Jul 14 12:13:54 PDT 2005 12:13:54 up 2 days, 12:50, 8 users, load average: 0.35, 0.27, 0.18 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT student_a tty1 - Mon23 ?xdm? 2:43m 3.06s /bin/bash student tty2 :0.0 Tue17 0.00s 2.19s 0.00s /bin/sh /home/student/bin/wdate.sh

  7. Return values • Upon exiting, every command returns an integer to its parent called a return value • The shell variable $? expands to the return value of previously executed command [elvis@station elvis]$ ls -l /etc/passwd -rw-r--r-- 1 rootroot 3694 Aug 15 16:26 /etc/passwd [elvis@station elvis]$ echo $? 0 [elvis@stationelvis]$ ls -l /etc/password ls: /etc/password: No such file or directory [elvis@stationelvis]$ echo $? 1

  8. Running Multiple Commands Conditionally • && and || conditionally separate multiple commands [elvis@stationelvis]$ echo "one two three" > numbers.txt [elvis@stationelvis]$ mkdir /tmp/boring && mv numbers.txt /tmp/boring [elvis@stationelvis]$ ls [elvis@stationelvis]$ echo "one two three five seven eleven" > primes.txt [elvis@stationelvis]$ mkdir /tmp/mostly/boring && mv primes.txt /tmp/mostly/boring mkdir: cannot create directory `/tmp/mostly/boring': No such file or directory [elvis@stationelvis]$ ls primes.txt [elvis@stationelvis]$ chmod 600 /tmp/boring/numbers.txt || echo "chmod failed." [elvis@stationelvis]$ chmod 600 /tmp/mostly/boring/primes.txt || echo "chmod failed" chmod: failed to get attributes of `/tmp/mostly/boring/primes.txt': No such file or directory chmod failed

  9. Task • Write the script that will • create an empty file called testfile in your home directory • copy the file to the /tmp directory and delete the copy on your home directory of the copy completes successfully • How do you ensure the script runs? • Where to put the script so you can run it?

  10. Shell Script Variables • Shell variables are assigned using an A=apple syntax • Variables are examined ("dereferenced") with the $ character, as in echo $A • At the kernel level, every process has a collection of environment variables, which are inherited by child processes • The export command converts a shell variable into an environment variable • The set and env commands list shell variables and environment variables, respectively

  11. Bash Variables

  12. Environment Variables

  13. Command Line Expansion • The bash shell expands certain command line metacharacters before interpreting the command. • Tilde expansion expands tokens that begin with a tilde (~) to users home directories

  14. Brace expansion • Brace expansion expands tokens with braces ({}) into multiple words, each of which contains a single word from the specified list mkdir {dir1,dir2,dir3}/{subdir1,subdir2} mkdir dir1 mkdir dir1/subdir1 mkdirdir1/subdir2 ...etc...

  15. Command substitution • Command substitution expands text enclosed within backticks (``) or "dollar parenthesis" ($()) into the output produced by the enclosed command. VAR=`COMMAND` FILES=`ls /etc` FILES=$(ls /etc)

  16. Quotes • Double quotes ("..." ), single quotes ('...'), and the backslash character can be used to protect characters from being expanded by the shell. NUMBER=1234 echo “testing $NUMBER > file” echo testing $NUMBER \> file echo ‘testing $NUMBER > file’

  17. Arithmetic Expansion • The bash shell treats text wrapped within a $((...)) syntax as an arithmetic operation. Variables are treated as numeric integers where appropriate, and standard mathematical operators such as +, -, *, and / are treated as such. [prince@station prince]$ WIDTH=16 [prince@station prince]$ HEIGHT=82 [prince@station prince]$ echo $(( $WIDTH * $HEIGHT)) 1312

  18. Advanced Shell Scripting • Within a bash script, any arguments provided when the script was invoked, are available as positional parameters (i.e, the variables $1, $2, ...). • The readbuiltin command can be used to read input from the keyboard ("standard in"). • The bash shell uses a if ... then ... [else ...] fi syntax to implement conditional branches. • The test command is often used as the conditional command in if ... then branches. • The bash shell uses a for ... in ... do ... done syntax to implement loops.

  19. The if statement if condition then commands fi if condition then commands else commands fi

  20. Testing Conditions • You can use test or test -f /etc/hosts • You can use [ [ -f /etc/hosts ]

  21. Testing Conditions

  22. Testing Conditions

  23. Loop statement for var in list do Commands done

  24. Loop statement for i in $* for i in /etc/*.conf for i in $(command)

  25. Example [elvis@stationelvis]$ cat pack #!/bin/bash for DIR in $* do if [ -d $DIR ] then if [ "$DIR" == "." -o "$DIR" == ".." ] then echo "skipping directory $DIR“ else tar cvzf $DIR.tgz $DIR && rm -fr $DIR fi else echo "skipping non directory $DIR“ fi done

More Related