Notions de base de Shell Korn
Il s'agit d'un simple aperçu des bases du shell Korn. Le shell Korn (ksh93) est compatible POSIX et dispose de fonctionnalités plus robustes.
Sous Solaris (les versions 9 et 10), la valeur par défaut Korn shell dans /bin/ksh est en fait ksh88. Ce Korn shell (ksh88) n'est pas compatible avec la norme POSIX. Solaris (les versions 9 et 10) contient également le shell Korn (ksh93): /usr/dt/bin/dtksh.
Le système Mac OS X 10.6 a ksh93 dans /bin/ksh par défaut.
Sous Solaris (les versions 9 et 10), la valeur par défaut Korn shell dans /bin/ksh est en fait ksh88. Ce Korn shell (ksh88) n'est pas compatible avec la norme POSIX. Solaris (les versions 9 et 10) contient également le shell Korn (ksh93): /usr/dt/bin/dtksh.
Le système Mac OS X 10.6 a ksh93 dans /bin/ksh par défaut.
Sortie
.
#!/bin/ksh print "Hello"
Variables
.
typeset -i num=10/2 # set an integer char=a # set a character string="This is a string" # set a string # show the results print Number is $num print Character is $char print String is $string
Constantes
.
#!/bin/ksh typeset -r PI=3.14159265359 # declare constant print PI equals $PI # output result # attempt to change value PI=3 # try to redefine variable print Setting PI to 3: $PI # output result PI=$(expr $PI + 1) # try incrementing variable print Incrementing PI: $PI # output result
Arithmétique
.
#!/bin/ksh # integer arithmatic width=5; length=6 area=$(($length * $width)) print "The area of a square (width=$width, length=$length) is $area" # boolean logic true=1; false=0 result=$(($true && $false || $true)) print "The statement (true AND false OR true) is $result"
#!/bin/ksh typeset -Fr PI=3.14159265359 # set approximation of π radius=3 # set radius area=$(($PI * pow($radius,2))) # calculate area echo "The area of a circle is $area" # output result
#!/bin/ksh # set approximation of π typeset -Fr PI=3.14159265359 # print calculaton of cos(π/4) print The cosine of pi/4 is: $((cos($PI/4)))
Entrée
d
#!/bin/ksh read name?"Enter your name: " # print prompt & acquire input print Hello $name # output result using variable
Choix
.
#!/bin/ksh # prompt user and get input read number?"Input a number: " # test input and output result if (( $number > 0 )); then print Number is greater than 0 elif (( $number < 0 )); then print Number is less than 0 else print Number is 0 fi
read keypress?"Input a character: " # prompt user and get input keypress=${keypress:0:1} # substring for only 1st char # case construction case "$keypress" in [[:lower:]] ) echo "Lowercase letter";; [[:upper:]] ) echo "Uppercase letter";; [[:digit:]] ) echo "Digit";; * ) echo "Punctuation, whitespace, or other";; esac
#!/bin/ksh read keypress?"Input a character: " # prompt & get input keypress=${keypress:0:1} # substring for only 1st char # test if keypress matches pattern if [[ $keypress = [[:lower:]] ]]; then print "\nLowercase letter" elif [[ $keypress = [[:upper:]] ]]; then print "\nUppercase letter" elif [[ $keypress = [[:digit:]] ]]; then print "\nDigit" else print "\nPunctuation, whitepace, or other" fi
Boucles
.
#!/bin/ksh let count=10 # set initial state # loop 10 to 1 with while/do...done construction while (( $count > 0 )); do # test if 0 reached print "Count is $count" # print curent count let count="$count - 1" # decrement done
#!/bin/ksh # loop until user exits using until/do...done construction until [[ "$answer" = "quit" ]]; do read answer?"Enter your name (quit to exit): " # prompt and get input if [[ $answer != "quit" ]] ; then # print if not exiting print Hello $answer fi done
#!/bin/ksh # loop through listing with for/in/do...done for item in $(ls); do # cycle through directory listing if [[ -d $item ]]; then # test if path is directory print "$item is a directory" else print "$item is not a directory" fi done
Tableaux
Le shell Korn supporte les tableaux.
Ce script suivant montre la création d'un tableau et l'impression de la taille du tableau et le contenu du tableau.
Ce script suivant montre la création d'un tableau et l'impression de la taille du tableau et le contenu du tableau.
#!/bin/ksh nicknames[0]=bob nicknames[1]=ed nicknames[2]=steve nicknames[3]=ralph nicknames[4]=joe nicknames[5]=deb nicknames[6]=kate print "The number of nicknames is ${#nicknames[*]}" print "The nicknames are: ${nicknames[*]}"
Le script suivant montre comment énumérer à travers le tableau en utilisant la boucel for.
#!/bin/ksh set -A nicknames bob ed steve ralph joe deb kate print "The names are: " for name in ${nicknames[*]}; do print " $name" done
Le script suivant montre comment énumérer à travers le tableau avece un compteur.
#!/bin/ksh set -A nicknames bob ed steve ralph joe deb kate count=0 print "The names are: " while [[ $count -lt ${#nicknames[*]} ]] ; do print " nicknames[$count]=${nicknames[$count]}" count=$(($count+1)) done
Tableaux associatifs
Un tableau associatif est est un type de données associant à un ensemble de clefs un ensemble correspondant de valeurs. Le shell Korn supporte les tableaux associatifs.
Voici un script qui crée un tableau associatif, imprime les touches, imprime les valeurs, puis pour chaque clé, imprime la paire de clés et de valeur.
Voici un script qui crée un tableau associatif, imprime les touches, imprime les valeurs, puis pour chaque clé, imprime la paire de clés et de valeur.
#!/bin/ksh # required to declare array type typeset -A ages # individually build array ages[bob]=34 ages[ed]=58 ages[steve]=32 ages[ralph]=23 ages[deb]=46 ages[kate]=19 # print all keys and values print "Keys (names): ${!ages[@]}" print "Values (ages): ${ages[@]}"
#!/bin/ksh # need to declare array type typeset -A ages # create initial associative array ages=([bob]=34 [ed]=58 [steve]=32 [ralph]=23) # Add more with ksh93j ages+= ([deb]=46 [kate]=19) # Print Key/Value Pairs print "The ages are: " for name in ${!ages[@]} do print " ages[$name]=${ages[$name]}" done