shell编程

来源:互联网 发布:淘宝4.6.1 编辑:程序博客网 时间:2024/06/15 05:32

函数

#!/bin/sh

for(){

     echo "I cone to foo function"

}

echo "foo begin"

foo

echo "foo ending"


exit 0

//和C不同,foo函数没有带括号。


shell 编程之2>&1

经常可以在一些脚本,尤其是在crontab调用时发现如下形式的命令调用


/tmp/test.sh > /tmp/test.log 2>&1

前半部分/tmp/test.sh > /tmp/test.log很容易理解,那么后面的2>&1是怎么回事呢?

要解释这个问题,还是得提到文件重定向。我们知道>和<是文件重定向符。那么1和2是什么?在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2。所以这里2>&1的意思就是将标准错误也输出到标准输出当中。

下面通过一个例子来展示2>&1有什么作用:

$ cat test.sh
t
date

test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且输出时间信息,默认输出到stdout

./test.sh > test1.log
./test.sh: line 1: t: command not found

$ cat test1.log
Tue Oct 9 20:51:50 CST 2007

可以看到,date的执行结果被重定向到log文件中了,而t无法执行的错误则只打印在屏幕上。

$ ./test.sh > test2.log 2>&1

$ cat test2.log
./test.sh: line 1: t: command not found
Tue Oct 9 20:53:44 CST 2007

这次,stderr和stdout的内容都被重定向到log文件中了。

实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了,那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使用2> file

Linux用户命令行字符环境变量 - [Linux | UNIX]

http://fbirdzp.blogbus.com/logs/37423250.html

用户登录Linux系统的字符界面后,就会出现"#"或"$"等命令提示符,比如"[root@pxe root]# “、"[oracle@db1 ~]$”或是 “-bash-3.00#”等等。

通过设置环境变量PS1、PS2、PS3以及PS4来自定义用户命令行的字符显示。如果要长期永久性修改提示符,可以将修改提示符的命令添加到$HOME/.profile或$HOME/.bash_profile文件中。

1. PS1

PS1是主提示符变量,也是默认提示符变量。默认值"/s-/v/$“,显示shell类型和版本。
基本上通过设置PS1来定义命令行提示字符即可,最常用的需求就是显示登录的用户名、主目录、主机名等等,举个例子如下:


 

显示用户名,主机名和动态显示当前目录
-bash-3.00# export PS1="[/u@/h /w]"
[root@MagicLinux ~]cd /etc
[root@MagicLinux /etc]

注意:如果当前目录是用户的HOME目录,则显示"~


 

PS1变量可以使用的参数值有如下:

/d代表日期,格式为weekday month date,例如:"Mon Aug 1"/H完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux/h仅取主机的第一个名字,如上例,则为fc4,.linux则被省略/t显示时间为24小时格式,如:HH:MM:SS/T显示时间为12小时格式/A显示时间为24小时格式:HH:MM/u当前用户的账号名称/vBASH的版本信息/w完整的工作目录名称。家目录会以 ~代替/W利用basename取得工作目录名称,所以只会列出最后一个目录/#下达的第几个命令/$提示字符,如果是root时,提示符为:# ,普通用户则为:$/[字符"["/]字符"]"/!命令行动态统计历史命令次数

2. PS2

PS2是副提示符变量,默认值是''> ''。
PS2一般使用于命令行里较长命令的换行提示信息,比如:


默认设置
-bash-3.00# rpm -q gcc make binutils openmotif setarch compat-db compat-gcc /
> compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel

自定义设置
-bash-3.00# export PS2="PS2 => "
-bash-3.00# rpm -q gcc make binutils openmotif setarch compat-db compat-gcc /
PS2 => compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel


 

3. PS3,PS4

这两个环境变量可能用得不多,不研究了。如果有兴趣,可以学习bash里面的简介。

(可以百度 linux超級技巧,第33章專門講述了ps3,ps4)

PS3    The value of this parameter is used as the prompt for the select command (see SHELL GRAMMAR above).
PS4    The value of this parameter is expanded as with PS1 and the value is printed before  each  command  bash displays  during an execution trace.  The first character of PS4 is replicated multiple times, as neces-sary, to indicate multiple levels of indirection.  The default is ''+ ''.



原创粉丝点击