1 / 26

Scripting Languages and C-Shell

Learn about scripting languages and C-Shell, including syntax, metacharacters, useful commands, variables, loops, conditional statements, and file attribute testing.

ebittner
Download Presentation

Scripting Languages and C-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. Scripting Languages and C-Shell

  2. What is a scripting language ? • Script is a sequence of commands written as plain text and run by an interpreter (shell). • Today – some scripting languages have evolved into lightweight programming languages. • Used for lightweight operations such as manipulation of files and prototyping. • Examples: • Shell scripts • Perl • Javascript

  3. C-Shell • Unix systems come with a variety of shells, e.g. Bourne (sh), Bash (bash), C (csh), TC (tcsh). • Find your shell: echo $SHELL • C shell startup files: .login, .cshrc • Has C-like syntax

  4. Some Shell Metacharacters • # - commnet • “ – quote multiple characters but allow substitution • $ - dereference a shell variable • & - execute in background • ‘ – quote multiple characters • * - match zero or more characters • ? – match a single character • [] – insert wild cards: [0-3,5] • ; - separate commands • ! – refer to event in the history list: !!,!4 • ` - substitute a command • % - refer to a job: %3

  5. Some useful c-shell commands • head / tail – returns first / last lines of a file • echo – print command • sort – used to sort strings in lexicographical order • cat – concatenate files and print • grep – find regular expressions in files • find – find files by criteria • wc – word count on files • diff - find differences between files • basename / dirname – extract file / directory name from full path • touch – change file timestamp • mail – sending mail • cp/mv – copy/move files

  6. Redirection and pipes prog redirection file • > : redirect stdout • >> : append stdout • >& : redirect stdout and stderr • >>& : append stdout and stderr • < : redirect stdin prog1 pipe prog2 • | : redirect stdout of prog1 to stdin of prog2 • |& : same, with stdout and stderr

  7. Some environment variables • home – name of home directory • path – search path • prompt – shell prompt • cwd – current working directory • term – type of terminal • history – length of history recorded

  8. How to write a c-shell script • Edit the code file (no mandatory extension) • Make sure the first line in the file is: #!/bin/csh –f • Add executable permission: chmod +x filename

  9. #!/bin/csh –f ################ #hello worlds # ################ echo Hello world

  10. C-Shell Syntax

  11. Defining/changing shell variables • Variables local to current shell: • String: set var1[=strval1]…varN[=strvalN] • Numeric: @ var1[=numval1]…varN[=numvalN] • Global variables: • setenv var [strval] – set and export • $var or ${var} – access value of var Examples: • set name = Alon #string var. • set name = $< #input from user • @ a = 0 #numeric var. • set dir = `pwd` #command substitution

  12. Array variables • Available for integers and strings • Indexed starting from 1!!! • Declaration: set name = (array elements) • $#name – number of elements in array • $name[i] – access the ith element • $name[i-j] – elements i to j. Examples: • set students = (David Ron Idit) • set fib = (0 1 1 2 3) • set fib = ($fib 5) #append • set size = $#fib #size==6

  13. Passing arguments to scripts • $argv[1]…$argv[9] are assigned the command line arguments • $#argv or $# - total number of arguments • $argv[*] or $* - values of all arguments • $argv[0] or $0 – name of script • shift [variable_name] – in case there are more than 9 arguments – shifts words one position to the left in variable (argv is the default).

  14. #!/bin/csh –f ################ #simple_example # ################ # string variable set course = soft1 echo $course # array set names = ( Danny Dina Eyal Ayelet Ori Neta ) echo $names echo $#names # size of array echo $names[2] # the second element echo $names[2-] # starting from the second element echo $names[-2] # until the second element echo $names[2-3] # elements 2,3

  15. # numeric variables and expression evaluation @ num = 17 echo $num @ num -= 3 echo $num @ num *= 14 echo $num # if we want to assign the value of a command to a variable set chars = `wc -l ./simple_example` echo $chars # accessing program parameters echo The program name is : $0, the first parameter is $1 and the second is $2 echo The number of parameters \(not including program name\) is $#argv

  16. Loops • foreach identifier (set) . . . end • while (expression) . . . end • Expression can include the usual C operators. • break, continue – as in C.

  17. Conditional statements • switch (value) • case value1: • breaksw • . . . • default: • endsw • if (expression) command • if (expression) then then-command-list [else if (expression) then then-command-list . . . else else-command-list] endif

  18. Testing files attributes • if (-op file_name) then… -r : read access -w : write access -x : execute access -e : existence -o : ownership -f : plain (non-dir.) file -d : directory -l : link

  19. #!/bin/csh –f ######## # sum # ######## if ($#argv == 0) then echo Usage: $0 num1 [num2 num3 ...] exit 1 endif @ sum = 0 foreach number ($argv) @ sum += $number end echo The sum is : $sum @ average = $sum / $#argv @ remainder = $sum % $#argv echo The avergae is: $average\($remainder\)

  20. #!/bin/csh -f ############ # sort_files # ############ if ($#argv == 0) then echo USAGE: $0 file_names_to_sort echo This command writes on the original files \!\!\! exit 1 endif foreach file($argv) sort $file > $file.tmp mv $file.tmp $file end

  21. #!/bin/csh -f # Biggest_file # INPUT: Directory name # OUTPUT: The file with the biggest number of characters in the given directory if ($#argv == 0) then echo USAGE: $0 directory_name exit 1 endif if (-d $1) then @ max = 0 foreach file($1/*) if (-r $file && -f $file) then set wc_out = `wc -c $file` if ($wc_out[1] > $max) then set biggest_file = $wc_out[2] @ max = $wc_out[1] endif else if (!(-r $file)) then echo $file unreadable endif end echo The biggest file is $biggest_file echo The number of characters is $max else echo $1 is not a directory endif

  22. #!/bin/csh -f # Modulo3 # INPUT: sequence of integer numbers separated by \n terminated by 0 # OUTPUT: prints the value of each number modulo 3 set num = $< while ($num != 0) @ modulo = $num % 3 switch ($modulo) case 0: echo 0 breaksw case 1: echo 1 breaksw case 2: echo 2 breaksw default: endsw set num = $< end

  23. Retrieving returned values • Returned values (by return, exit) are stored in status environment variable • The script: #!/bin/csh -f ./prog if ($status != 0) then echo "Error occured!" endif runs prog (from current dir) and reports whether an error occurred.

  24. awk/gawk • Useful utility for file manipulation • Processes input line by line. • Example: gawk ‘{print $1}’ input • For details see : http://www.gnu.org/software/gawk/manual/

  25. #!/usr/bin/gawk -f BEGIN { stud_num = total = high_stud_num = total_high = 0} { if (NF != 3) { print "error in line", FNR, ":", $0 next } ++stud_num total += $3 if ($3 > 80) { total_high += $3 ++high_stud_num } } END { print "Number of students: ", stud_num print "Avergae grade is: ", total / stud_num print "Average of high grades is: ", total_high / high_stud_num}

  26. Running with input : Ron 033453671 91 Yael 034567832 73 Ran 040478124 100 Yoav 060381253 95 Tal 045623141 78 90 Output is : error in line 5 : Tal 045623141 78 90 Number of students: 4 Avergae grade is: 89.75 Average of high grades is: 95.3333

More Related