分类: python/ruby
2012-06-05 21:57:32
4:shell内部命令
shell脚本程序可以执行两类命令,一类是可以在命令行提示符中执行的普通命令,也称为外部命令。另外一类是内部命令。内部命令通过shell内部实现,它们不能被外部程序调用。
1:break命令
break命令能够跳出for,while和until循环。你可一在break后面加上数字表明要跳出几层,默认为一层。
实例:
#!/bin/sh
echo "testing break ...."
var=1
while : ; do
echo "now var is $var"
if [ "$var" -gt 5 ] ; then
echo "exec break !"
break
fi
var=$(($var 1))
done
exit 0
测试结果:
lishuo@lishuo-rev-1-0:~/桌面$ ./a
testing break ....
now var is 1
now var is 2
now var is 3
now var is 4
now var is 5
now var is 6
exec break !
2::命令
冒号(:)命令十一个空命令。它也会被当作true来简化条件逻辑。
在一些老的shell脚本中,:有的时候会被用作注释,等同与#。
实例:
#!/bin/sh
echo "testing : ...."
: this is a comment !
# this is a comment !
echo "test is ended !"
测试结果:
lishuo@lishuo-rev-1-0:~/桌面$./a
testing : ....
test is ended !
3:continue命令
该命令非常类似与c语言里面的continue关键字,这个命令是for,while和until循环跳到下一次循环继续执行。
实例:
#!/bin/sh
echo "test continue ..."
rm -rf x*
touch x1
touch x2
mkdir x3
touch x4
for file in x* ; do
if [ -f "$file" ] ; then
echo "checking $file ... , it's a file !"
continue
fi
echo "the dirctory is $file"
done
rm -rf x*
exit 0
测试结果:
lishuo@lishuo-rev-1-0:~/桌面$ ./a
test continue ...
checking x1 ... , it's a file !
checking x2 ... , it's a file !
the dirctory is x3
checking x4 ... , it's a file !
4:echo命令
echo相当与c语言里面的printf,当然shell里面也有printf,它的主要作用就是显示shell脚本。
echo -n "hello world" #它会去掉换行符
echo -e "hello world\c" #激活转义字符
5:eval命令
eval允许你对参数进行求值,相当与在参数前面再加上一个$。
6:exec命令
它的典型用法就是将当前shell替换为一个不同的程序,exec后面的代码都不会再被执行,因为执行者个脚本的程序已经不存在了。
实例:
#!/bin/sh
echo "testing exec ..."
exec echo "test "
echo "this command is not executable !"
exit 0
测试结果:
lishuo@lishuo-rev-1-0:~/桌面$./a
testing exec ...
test
7:exit n命令
exit命令使脚本程序以退出码n结束运行。在shell中,退出码0表示成功,退出码1-255是脚本程序使用的错误代码。
8:export命令
它将参数导出到子shell中,并使之在子shell中可用,这类似与c语言的global和extern。
实例:
#!/bin/sh
# this is shell-script a
echo "$foo"
echo "$bar"
exit 0
#!/bin/sh
# this is shell-script b
foo="this variable will noe be used in a !"
export bar="this var is oppsite to foo !"
./a
exit 0
测试结果:
lishuo@lishuo-rev-1-0:~/桌面$ ./b
this var is oppsite to foo !
10:expr命令
expr命令将它的参数作为一个表达式来求值,和$(())同义。
11:return命令
return的作用是使函数返回。如果return命令没有指定参数,return会返回最后一条命令的退出码。
12:shift命令
shift命令把所有的额参数左移一个位置,使得$2变成$1...,其中$0会保持不变。
实例:
#!/bin/sh
while [ "$1" != "" ] ;do
echo "$1"
shift
done
exit 0
测试结果:
lishuo@lishuo-rev-1-0:~/桌面$ ./a li chen zhang wang
li
chen
zhang
wang
13:trap命令
trap命令用于指定在接收到信号将要采取的行动,trap的一种常见用途就是在脚本程序被终端完成清理工
作。
trap命令的参数分为两部分,前一部分是接收到指定信号将要采取的行动,后一部分是要处理的信号。
语法格式:
trap command signal
command:指接收到信号之后执行的命令
signal:信号可以使名字或者数字,shell中总是用数字来表示,可以使用trap -l 来查看信号编号及其关联的名称,在使用信号名的时候要省略sig前缀。
下面是所有的信号:
1) sighup 2) sigint 3) sigquit 4) sigill 5) sigtrap
6) sigabrt 7) sigbus 8) sigfpe 9) sigkill10) sigusr1
11) sigsegv12) sigusr213) sigpipe14) sigalrm15) sigterm
16) sigstkflt17) sigchld18) sigcont19) sigstop20) sigtstp
21) sigttin22) sigttou23) sigurg24) sigxcpu25) sigxfsz
26) sigvtalrm27) sigprof28) sigwinch29) sigio30) sigpwr
31) sigsys34) sigrtmin35) sigrtmin 136) sigrtmin 237) sigrtmin 3
38) sigrtmin 439) sigrtmin 540) sigrtmin 641) sigrtmin 742) sigrtmin 8
43) sigrtmin 944) sigrtmin 1045) sigrtmin 1146) sigrtmin 1247) sigrtmin 13
48) sigrtmin 1449) sigrtmin 1550) sigrtmax-1451) sigrtmax-1352) sigrtmax-12
53) sigrtmax-1154) sigrtmax-1055) sigrtmax-956) sigrtmax-857) sigrtmax-7
58) sigrtmax-659) sigrtmax-560) sigrtmax-461) sigrtmax-362) sigrtmax-2
63) sigrtmax-164) sigrtmax
实例:
#!/bin/sh
echo "testing sig ..."
while : ; do
sleep 1 # delay one second per time
trap echo "test ended !" int # you can interrupt it by entering ctrl c
echo "testing...,please enter ctrl c to interrupt "
done
exit 0
测试结果:
lishuo@lishuo-rev-1-0:~/桌面$ ./a
testing sig ...
trap: test ended !: bad trap
testing...,please enter ctrl c to interrupt
trap: test ended !: bad trap
testing...,please enter ctrl c to interrupt
trap: test ended !: bad trap
testing...,please enter ctrl c to interrupt
trap: test ended !: bad trap
testing...,please enter ctrl c to interrupt
14:set命令
set命令 用来初始化命令行参数变量,塔克一把一个或者多个参数付赋给位置参数,位置参数为$1,$2...
实例:
#!/bin/sh
set li chen wang
echo "$1"
echo "$2"
echo "$3"
exit 0
测试结果:
lishuo@lishuo-rev-1-0:~/桌面$ ./a
li
chen
wang