270 likes | 394 Vues
Unix Scripting… . Some General Ramblings…. Quoting. Single quote: ' ... ' The shell ignores all enclosed characters Double quote: " ... " The shell ignores most enclosed characters The shell does interpret $ , ` , and Backtick or Lefttick: ` ... `
E N D
Unix Scripting… Some General Ramblings…
Quoting • Single quote: '...' • The shell ignores all enclosed characters • Double quote: "..." • The shell ignores most enclosed characters • The shell does interpret $, `, and \ • Backtick or Lefttick: `...` • Runs a command output treated as a variable • Backslash: \ • Special treatment for the following character.
Setting Variables • Setting variables • var=value • ENVVAR=value • export ENVVAR • Note: • variables don’t affect parent shells • only environmental variables affect child shells
Using variables • “$*” - list of all command-line parameters. Bad. • “$@” – Good list of all command-line parameters. • “$1”, “$2”, …, “$9” – individual command line parameters
Shell Loops - if • if expr ; then cmd1 ; else cmd2 ; fi • cmd1 and cmd2 can be complex • the else can be omitted $ if [ x"$var" = x"yes" ] > then > echo good > fi good • if [ x“$var” = x“yes” ] ; then echo good ; fi
Shell Loops – while, for while expr do cmd done for var in a b c d e do cmd done
Shell functions • Act like mini-shell scripts. • Can set variables in the current shell. function-name () { cmd1 cmd2 }
Using the test Command • The test command makes preliminary checks of the UNIX internal environment and other useful comparisons • Place the test command inside the shell script or execute it directly from the command line • The test command can be used to: • Perform relational tests with integers • Test strings • Determine if a file exists and what type of file it is • Perform Boolean tests
Relational Integer Tests The test command returns a value known as an exit status, which is a numeric value and indicates the results of the test performed: true if 0 (zero) and false if 1 (one)
Testing Files From The Prompt… $ touch testfile $ ls -l testfile -rw-r--r-- 1 student student 0 Oct 9 11:45 testfile $ test -x testfile $ echo $? 1 (Note: 0 = true and 1 = false) $ chmod 700 testfile $ ls -l testfile -rwxr-xr-x 1 student student 0 Oct 9 11:45 testfile $ test -x testfile $ echo $? 0 $ $ test -f test_file $ echo $? 1
Performing Boolean Tests AND – returns true (0) if both expressions are true, otherwise returns false (1) OR – returns true if either expression is true, otherwise if neither is true, returns false ! – negates the value of the expression
Boolean Tests (testfile1 & testfile2) touch testfile1 test –f testfile1 –a –x testfile2 Echo $? touch testfile2 test –f testfile1 –a –x testfile2 echo $? chmod 777 testfile1 echo $? test –f testfile1 –a –x testfile2 rm testfile2 test –f testfile1 –a –x testfile2
Script Exercise 1 • Write a script that will echo to the screen at least three arguments that you include at the command line when you run the script
Script Exercise 1 Solution #!/bin/bash echo $1 $2 $2
Script Exercise 2 • Write a script that will create a file that is named when you execute the shell script • e.g. myshell.sh testfile
Script Exercise 2 Solution #!/bin/bash touch $1 # or… echo “testing” > $1 # or… > $1 # or… ls > $1
Script Exercise 3 • Write a script that will create a file using today’s date and the date format is ddmmmyy.dat
Script Exercise 3 Solution #!/bin/bash touch `date +%d%b%y`.dat # or…. FILENAME=`date +%d%b%y`.dat Touch $FILENAME # or etc….
Script Exercise 4 • Write a script that will ask the user for to input a file name and then create the file and echo to the screen that the file name inputted had been created
Script Exercise 4 Solution #!/bin/bash clear echo ‘enter a file name: ‘ read FILENAME touch $FILENAME echo “$FILENAME has been created”
Script Exercise 5 • Now take the script from exercise 4 and write it so it will not create a file if no input is received
Script Exercise 5 Solution #!/bin/bash clear echo ‘Enter a file name: ‘ read FILENAME if [ ! –z $FILENAME ] ; then touch $FILENAME echo “$FILENAME has been created” else echo “You did not enter a file name.” fi
Script Exercise 6 • Write a script that asks for the users favorite color then if it is not “red” inform them that is the wrong answer, wait 3 seconds, clear the screen and ask the question again.
Script Exercise 7 • Ask the user to enter multiple entries (name, age, sex and favorite color) one at a time. Then echo those answers back to the screen.
Script Exercise 8 • Modify the script in exercise 7 to write the responses to a file named “ddmmyy.dat” one answer per line.