您的位置:首页 > 运维架构 > Shell

高级shell脚本编程之重定向、环境变量、shell函数、echo命令用法

2012-10-31 20:45 856 查看
高级shell脚本编程之重定向、环境变量、shell函数

shell并不局限于简单地逐行执行命令,更为强大的功能之一是能够创建函数和函数库。希望自定义命令行交互的方式或者自动化文件处理任务。考虑用shell脚本。

1、输入和输出重定向

STDIN

STDOUT

STDERR

重定向操作符

>        
-------把STDOUT重定向到一个文件

<        
-------把STDIN重定向到一个文件

>>     
-------把STDOUT添加到一个文件的末尾

|        
-------从一个程序或者进程获取输出,然后发送给另一个程序或进程

<<delimiter    把当前的输入流和STDIN关联起来直到到达指定的分隔符。

[root@localhost shell]# cat << END

> the cat

> sat on the

> Mat.

> END

the cat

sat on the

Mat.

[root@localhost shell]# cat << END

> the cat

> sat on the

> Mat.

> END

the cat

sat on the

Mat.

>操作符有几个修饰标记,这些标记可以改变他的行为。

>&    STDOUT和STDERR同时进行重定向。

>!     将迫使文件以append模式创建,或者以normal模式覆盖一个已经存在的文件。

>@  将以二进制模式打开一个文件

2、命令替换:反引号和圆括号扩展

#!/bin/sh

Lines=`wc -l filelist`

echo $Lines

[root@localhost shell]# ./p206

28 filelist

Lines=$(wc -l filelist)   //符号扩展

3、使用环境变量和shell变量

export命令用于修改shell变量,不带选项会显示很多环境变量。

export PATH=/bin

set命令可查看环境中已设置的shell变量

4、Shell函数

<1>、形式

name() {command;}

shell函数必须声明之后才能使用。还可以有返回值

#!/bin/sh

repeat(){

echo -en "I don't know $1 $2\n"

echo -en  "hello\n"

return 0

}

repeat Your Name

<2>、嵌套函数和递归

#!/bin/sh

number_one(){

echo "this is first one func speaking..."

number_two

}

number_two(){

echo "this is second func speaking...."

}

number_one

<3>、作用域

作用域包括全局域和局部域:使用local关键字标识局部变量

#!/bin/sh

scope(){

local soc=1

gblsoc=2

echo "local soc in func = $soc"

echo "global gblsoc in func = $gblsoc"

}

scope

echo "local soc outside func = $soc"

echo "gblsoc outside in func =$gblsoc"

exit 0

补充:echo命令用法:

echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。

  该命令的一般格式为: echo [ -n ] 字符串

  其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。

  功能说明:显示文字。

  语   法:echo [-ne][字符串]或 echo [--help][--version]

  补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。

  参   数:-n 不要在最后自动换行

  -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般

  文字输出:

  \a 发出警告声;

  \b 删除前一个字符;

  \c 最后不加上换行符号;

  \f 换行但光标仍旧停留在原来的位置;

  \n 换行且光标移至行首;

  \r 光标移至行首,但不换行;

  \t 插入tab;

  \v 与\f相同;

  \\ 插入\字符;

  \nnn 插入nnn(八进制)所代表的ASCII字符;

  –help 显示帮助

  –version 显示版本信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐