2010年(19)
分类:
2010-05-08 18:11:12
1、$$表示当前shell的PID。设置只读变量,只读变量是不能被重新定义或复位的,但是,如果使用了declare函数,只读变量可以被重新定义,但不能被复位。
[root@localhost xinbo]# name=Tom
[root@localhost xinbo]# readonly name
[root@localhost xinbo]# echo $name
Tom
[root@localhost xinbo]# unset name
bash: unset: name: cannot unset: readonly variable
unset为复位变量,即把相关的变量从存储器中删除。
2、常用echo和printf来打印出相关字符串和变量到终端,用来提示用户。
3、可以建立数组如:
[root@localhost xinbo]# names=( Tome liu xin bo )
[root@localhost xinbo]# echo ${names[1]}
liu
改变其值:
[root@localhost xinbo]# names[1]=li
[root@localhost xinbo]# echo ${names[1]}
li
4、函数:格式
function_name () {commands; commands; }
function function_name {commands;commands;}
function function_name (){commands;commands;}
例子:[root@localhost xinbo]# function greet { echo "Hello $LOGNAME, today is $(date)";}
[root@localhost xinbo]# greet
Hello root, today is 六 5月 8 17:44:18 CST 2010
在这里$(date)也可以用`date`代替。
[root@localhost xinbo]# function greet { echo "Hello $LOGNAME, today is `date`";}
[root@localhost xinbo]# greet Hello root, today is 六 5月 8 17:45:58 CST 2010
注意:{},左边{后面必须接一个空格。
[root@localhost xinbo]# declare -f
greet ()
{
echo "Hello $LOGNAME, today is `date`"
}
[root@localhost xinbo]# declare -F
declare -f greet
[root@localhost xinbo]# export -f greet
[root@localhost xinbo]# bash
[root@localhost xinbo]# greet
Hello root, today is 六 5月 8 17:48:47 CST 2010
[root@localhost xinbo]# ps
PID TTY TIME CMD
6614 pts/1 00:00:00 bash
11305 pts/1 00:00:00 bash
11322 pts/1 00:00:00 ps
带-f开关的declare命令列出在该shell中定义好的所有函数以及它们的定义。
带-F开关的说明命令只列出函数名。
[root@localhost xinbo]# export -f greet
把该函数定义为全局函数,这样的话,在子shell中我们就可以使用了。
如何清除函数呢?
[root@localhost xinbo]# greet
Hello root, today is 六 5月 8 17:55:58 CST 2010
[root@localhost xinbo]# unset -f greet
[root@localhost xinbo]# greet
bash: greet: command not found
[root@localhost xinbo]#
5、重定向
exec命令能够在不启动新进程的前提下,将当前正在运行的程序替换为一个新的程序,使用exec命令,不需创建子shell就能改变标准输入与输出。
用exec打开文件后,read命令每次都会将文件指针移到文件的下一行,直到文件末尾。如果要再次从文件开始读文件,就必须先关闭文件再打开。但是,如果使用cat和sort这类工具,操作系统就会在结束自动关闭文件。
exec < filea,打开文件 filea,用于读标准输入。
exec >filex,打开文件filex,用于标准输出。
[root@localhost ~]# exec > temp
[root@localhost ~]# ls
[root@localhost ~]# pwd
[root@localhost ~]# echo Hello
[root@localhost ~]# exec > /dev/tty
[root@localhost ~]# echo Hello
Hello
[root@localhost ~]#
当执行完exec > temp后,以后执行的命令ls,pwd等都输出到temp中了,直到后面把其指向终端才能在屏幕上显示。