不同的shell 有不同的写法,以下是各个shell的比较: Feature C/TC Bourne Bash Korn Variables: Assigning values to local variables set x = 5 x=5 x=5 x=5 Assigning variable attributes declare or typeset typeset Assigning values to environment variables setenv NAME Bob NAME='Bob'; export NAME export NAME='Bob' export NAME='Bob' Read-Only Variables: Accessing variables echo $NAME set var = net echo ${var}work network echo $NAME var=net echo ${var}work network echo $NAME var=net echo ${var}work network echo $NAME or print $NAME var=net print ${var}work network Number of characters echo $%var (tcsh only) N/A ${#var} ${#var} Special Variables: PID of the process $$ $$ $$ $$ Exit status $status, $? $? $? $? Last background job $! (tcsh only) $! $! $! Arrays: Assigning arrays set x = ( a b c ) N/A y[0]='a'; y[2]='b'; y[2]='c' fruit=(apples pears peaches plums) y[0]='a'; y[1]='b'; y[2]='c' set –A fruit apples pears plums Accessing array elements echo $x[1] $x[2] N/A echo ${y[0]} ${y[1]} print ${y[0]} ${y[1]} All elements echo $x or $x[*] N/A echo ${y[*]}, ${fruit[0]} print ${y[*]}, ${fruit[0]} No. of elements echo $#x N/A echo $y{#[*]} print ${#y[*]} Command Substitution: Assigning output of command to variable set d = `date` d=`date` d=$(date) or d=`date` d=$(date) or d=`date` Accessing values echo $d echo $d[1], $d[2], ... echo $#d echo $d echo $d print $d Command Line Arguments (Positional Parameters): Accessing $argv[1], $argv[2] or $1, $2 ... $1, $2 ... $9 $1, $2, ... ${10} ... $1, $2, ... ${10} ... Setting positional parameters N/A set a b c set `date` echo $1 $2 ... set a b c set `date` or set $(date) echo $1 $2 ... set a b c set `date` or set $(date) print $1 $2 ... No. of command line arguments $#argv $# (tcsh) $# $# $# No. of characters in $arg[number] $%1, $%2, (tcsh) N/A N/A N/A Metacharacters for Filename Expansion: Matches for: Single character ? ? ? ? Zero or more characters * * * * One character from a set [abc] [abc] [abc] [abc] One character from a range of characters in a set [a–c] [a–c] [a-c] [a–c] One character not in the set N/A (csh) [^abc] (tcsh) [!abc] [!abc] [!abc] ? matches zero or one occurrences of any pattern in the parentheses. The vertical bar represents an OR condition; e.g., either 2 or 9. Matches abc21, abc91, or abc1. abc?(2|9)1 abc?(2|9)1 Filenames not matching a pattern ^pattern (tcsh) I/O Redirection and Pipes: Command output redirected to a file cmd > file cmd > file cmd > file cmd > file Command output redirected and appended to a file cmd >> file cmd >> file cmd >> file cmd >> file Command input redirected from a file cmd < file cmd < file cmd < file cmd < file Command errors redirected to a file (cmd > /dev/tty)>&errors cmd 2>errors cmd 2> file cmd 2> errors Output and errors redirected to a file cmd >& file cmd > file 2>&1 cmd >& file or cmd &> file or cmd > file 2>&1 cmd > file 2>&1 Assign output and ignore noclobber cmd >| file N/A cmd >| file cmd >| file here document cmd << EOF input EOF cmd << EOF input EOF cmd << EOF input EOF cmd << EOF input EOF Pipe output of one command to input of another command cmd | cmd cmd | cmd cmd | cmd cmd | cmd Pipe output and error to a command cmd |& cmd N/A N/A (See coprocesses) Coprocess N/A N/A N/A command |& Conditional statement cmd && cmd cmd || cmd cmd && cmd cmd || cmd cmd && cmd cmd || cmd cmd && cmd cmd || cmd Reading from the Keyboard: Read a line of input and store into variable(s) set var = $< set var = 'line' read var read var1 var2... read var read var1 var2... read read -p prompt read -a arrayname read var read var1 var2... read read var?"Enter value" Arithmetic: Perform calculation @ var = 5 + 1 var=`expr 5 + 1` (( var = 5 + 1 )) let var=5+1 (( var = 5 + 1 )) let var=5+1 Tilde Expansion: Represent home directory of user ~username N/A ~username ~username Represent home directory ~ N/A ~ ~ Represent present working directory N/A N/A ~+ ~+ Represent previous working directory N/A N/A ~- ~– Aliases: Create an alias alias m more N/A alias m=more alias m=more List aliases alias alias, alias -p alias, alias –t Remove an alias unalias m N/A unalias m unalias m History: Set history set history = 25 N/A automatic or HISTSIZE=25 automatic or HISTSIZE=25 Display numbered history list history history, fc -l history, fc –l Display portion of list selected by number history 5 history 5 history 5 10 history –5 Re-execute a command !! (last command) !5 (5th command) !v (last command starting with v) !! (last command) !5 (5th command) !v (last command starting with v) r (last command) r5 (5th command) r v (last command starting with v) Set interactive editor N/A (csh) bindkey -v or bindkey -e (tcsh) N/A set -o vi set -o emacs set -o vi set -o emacs Signals: Command onintr trap trap trap Initialization Files: Executed at login .login .profile .bash_profile .profile Executed every time the shell is invoked .cshrc N/A BASH_ENV=.bashrc (or other filename) (bash 2.x) ENV=.bashrc ENV=.kshrc (or other filename) Functions: Define a function N/A fun() { commands; } function fun { commands; } function fun { commands; } Call a function N/A fun fun param1 param2 ... fun fun param1 param2 ... fun fun param1 param2 ... Programming Constructs: if conditional if ( expression ) then commands endif if { ( command ) } then commands endif if [ expression ] then commands fi if command then commands fi if [[ string expression ]] then commands fi if (( numeric expression )) then commands fi if [[ string expression ]] then commands fi if (( numeric expression )) then commands fi if/else conditional if ( expression ) then commands else commands endif if command then commands else ... fi if command then commands else ... fi if command then commands else ... fi if/else/elseif conditional if (expression) then commands else if (expression) then commands else commands endif if command then commands elif command then commands else commands fi if command then commands elif command then commands else commands fi if command then commands elif command then commands else commands fi goto goto label ... label: N/A N/A N/A switch and case switch ("$value") case pattern1: commands breaksw case pattern2: commands breaksw default: commands breaksw endsw case "$value" in pattern1) commands ;; pattern2) commands ;; *) commands ;; esac case "$value" in pattern1) commands ;; pattern2) commands ;; *) commands ;; esac case "$value" in pattern1) commands ;; pattern2) commands ;; *) commands ;; esac Loops: while while (expression) commands end while command do command done while command do command done while command do commands done for/foreach foreach var (wordlist) commands end for var in wordlist do commands done for var in wordlist do commands done for var in wordlist do commands done until N/A until command do commands done until command do commands done until command do commands done repeat repeat 3 "echo hello" hello hello hello N/A N/A N/A select N/A N/A PS3="Please select a menu item" select var in wordlist do commands done
转载于:https://blog.51cto.com/fuwenchao/1430455