2 回答
TA贡献1936条经验 获得超6个赞
1) bash
a=3 ; b=2 ; c=4
if (( a > b )) && (( a < c ))
或者
if [[ $a > $b ]] && [[ $a < $c ]]
或者
if [ $a -gt $b -a $a -lt $c ]
2) a=3 ; b=2 ; c=4
if (( a > b )) || (( a < c ))
或者
if [[ $a > $b ]] || [[ $a < $c ]]
或者
if [ $a -gt $b -o $a -lt $c ]
3) -o = or , -a = and , 但我一向只用 || 或者 &&
4) 可用, 但是要两个独立的 [ ] , [[ ]] 或 (( ))
看 1)
5) -ne 比较数字 (numberic) ; != 比较字符 (string), 但后者拿来
比较数字也可,只是不是标准用法
-lt 是等同 < , 但 < 只能在 shell 的数值操作符 (( )) 或
者 逻缉操作符 [[ ]] 才可使用, -lt , -eq , -gt , -ge
-le , 这些是 test , 就是 [ ] 这个内建命令使用的条件操
作符, 数字用, = , != 字符用, == 这个该是 [[ ]] 用的,
可用来比对正规表示式, 但用在 [ ] 也可,只是不太正统用法
TA贡献1846条经验 获得超7个赞
不同的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
- 2 回答
- 0 关注
- 156 浏览
添加回答
举报