| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 安全365社区 |
安全365
收藏本站
设为首页
会员登录:
站内搜索: 新闻中心 系统安全 网络安全 安全技术 下载中心
| 系统安全首页 | 漏洞分析 | 入侵检测 | 升级补丁 | 安全配置 |
Linux系统环境程序设计之路
Shell编程:Linux系统环境程序设计之路
作者:korn 文章来源:赛迪网 点击数: 更新时间:2008-3-11 1:25:07
 

函数

别的高级语言都有函数的感念,当然shell编程也有这个概念,当写一个比较大型的shell程序的时候,如果没有函数,则会到处都是重复的代码。当然也可以调用别的脚本,但是速度会比较慢。所以函数是必不可少并且非常重要的一个东西。

定义函数的格式
function_name(){...}
例子:
//~ fun_s
show(){
echo "show $*"
}
echo $*
echo "after function"
show c d
echo $*
exit 0
/////////////////////////////
$./fun_s a b
结果是
a b
after function
c d
a b

从上面的例子可以看出,当脚本调用函数的时候,脚本程序的位置参数会被替换成函数的位置参数,并且函数调用结束后还原。

return:

//~ return_s
#!/bin/bash
first(){
echo "is return"
}
second(){
echo "before return"
return "0"
echo "after return"
}
return_value="$(first)"
echo $return_value
second&&echo "return 0"||echo "return other"
exit 0
//////////////////////////////////////

输出 
is return
before return
return 0

该例子说明可以捕获函数内echo的字符串,如echo $(first) , 函数在return后不会再执行下面的语句。

second&&echo "return 0"||echo "return other" 该句的输出为 return 0。这里有人可能会和C语言混淆,因为在C语言里0表示的是false。而这里的0表示函数执行成功,可以理解为true,所以会输出return 0。

命令

break,continue 和c语言基本类似

echo 了解一点即可echo -n 输出没有换行。

eval: 
例子:
//~ eval_s 
#!/bin/bash
var1=abcd
var2=var1
eval var3=\$$var2
echo $var3
exit 0
///////////////////////////

eval相当于一个额外的$,它给出一个变量值的值,如例子里先是$var2使var3变成\$var1,又var1=abcd,所以var3变为abcd,连续解析了两次变量。

export:

看下面两个例子可以很好的说明export的作用。

//~ export1_s
#!/bin/bash
var1="this is var1"
var2="this is var2"
export var2
./export2_s
exit 0
///////////////////////////

//~ export2_s
#!/bin/bash
echo "$var1"
echo "$var2"
exit 0
/////////////////////////

输出:

this is var2

输出结果说明var1为空而var2却有值,这正是export起的作用,把var2变成了一个环境变量。

再看个例子:

#!/bin/bash
echo $var1
echo $var2
echo $var3
exit 0
//////////////////////////

//~ set-a_s
#!/bin/bash
set -a
var1="var1"
var2="var2"
var3="var3"
./set-a2_s
exit 0
//////////////////////////

//~ set-a2_s
输出:
var1
var2
var3

set -a的作用就是把它之后声明的所有变量都export

printf:

和C语言里的printf用法很相似的一个命令,使用非常方便。

set:

//~ set_s
#!/bin/bash
fun1()
{
echo "a b c d"
}
set $(fun1)
echo $1
echo $(date)
set $(date)
echo $1
exit 0
///////////////////////
输出: a 2008年 03月 06日 星期四 03:57:55 CST 2008年

date的输出是几个由空格分隔的值,set的作用能分隔出每个域。

shift:

就是让$2变$1,$3变$2,依此类推。

trap:

非常有用的一个命令,用于指定接受到信号后进行的动作,系统定义了非常多的信号类型,用trap -l命令可以查看所有的信号。

常见的几个信号有:

INT(2) 中断,按下ctrl+c组合键引发的

QUIT(3) 退出,按下ctrl+\引发

例子:

//~ trap_s
#!/bin/bash
trap var=2 INT
echo "please enter ctrl+c"
var=1
while [ $var = 1 ]
do
echo "in while"
sleep 1
done
exit 0
/////////////////////////

这个例子在我按下ctrl+c后改变了var的值,所以跳出循环,程序结束。

shell下的程序设计非常强大,你可以用它做出很多小工具,让你的使用linux系统更加流畅。shell还有非常多的功能文中没有提到,需要大家发现问题后再自己去解决。

文章录入:郝丽    责任编辑:郝丽 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    在嵌入式Linux系统中应用
    保障Linux系统的临时文件
    静态库和动态库 Linux系
    Ubuntu 7.10 Linux系统绑
    查看各种Linux系统版本信
    关于Linux系统主机维护v
    如何使你的Linux系统省略
    Linux系统“死机”时怎么
    Linux系统下的df/hdparm
    实用技巧 Linux环境下简
    站长邮箱:webmaster@anquan365.com
    联系电话:86-10-67634029 点击这里给我发消息

    Copyright © 2006-2008 www.anquan365.com 北京华安普特网络科技有限公司 版权所有