Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85590
  • 博文数量: 38
  • 博客积分: 273
  • 博客等级: 二等列兵
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-14 22:01
文章分类

全部博文(38)

文章存档

2012年(14)

2011年(24)

分类: LINUX

2011-12-08 20:43:55

exportreadonlyunsetenv管理变量

readonly可以使变量成为只读模式,从而禁止改变变量的值,可用于在shell中创建常量。

export用于修改或打印环境变量。环境是一个名称与值的简单列表,可供所有执行中的程序使用。新的进程会从其父进程继承环境,export则可以将新变量添加到环境中。

unset从当前shell删除变量与函数。

env为在命令行执行程序的环境提供更细致的控制。

如: readonly hours_per_day=24  seconds_per_hour=3600 days_per_week=7

     export PATH=$PATH:/usr/local/bin

     export –p    显示当前的环境

     unset hours_per_day  删除hours_per_day变量

          env –i name=value… command arguments 

忽略继承的环境,只使用命令行的环境执行command

 

参数展开

参数展开是shell提供变量值在程序中使用的过程。

默认情况下,未定义的变量会展开为null(空的)字符串。

: rm –rf  /$program  如果program未被定义,则会引发灾难。

Ÿ   展开运算符

1.  替换运算法

${varname:-word} 如果varname存在且非null,则返回其值,否则返回word;可用于当变量未定义则返回默认值的情况。

${varname:=word} 如果varname存在其非null,则返回它的值,否则设置varnameword,并返回其值;可用于当变量未设置则设置其为默认值的情况。

${varname:?message} 如果varname存在且非null,则返回它的值,否则显示varnamemessage,并退出当前的命令或脚本。可用于捕捉变量未设置引发的错误,message为提示消息。

${varname:+word} 如果varname存在且非null,则返回word,否则返回null;可用于测试变量的存在性。

 

2.  模式匹配运算符

path=/home/tolstoy/mem/long.file.name

${variable#pattern} 如果模式匹配与变量的开头处,则删除匹配的最短部分,并返回剩下的部分。如${path#/*/}返回tolstoy/mem/long.file.name

${variable##pattern}如果模式匹配与变量的开头处,则删除匹配的最长部分,并返回剩下的部分。如${path##/*/}返回long.file.name

${variable%pattern} 如果模式匹配于变量的结尾处,则伤处匹配的最短部分,并返回剩下的部分。如${path%.*}返回tolstoy/mem/long.file

${variable%%pattern} 如果模式匹配于变量的结尾处,则伤处匹配的最短部分,并返回剩下的部分。如${path%%.*}返回tolstoy/mem/long

 

Ÿ   特殊变量

# 目前进程的参数个数;

@ 传递给当前进程的命令行参数,等同于”$1” “$2” …

*  传递给当前进程的命令行参数,等同于”$1 $2 …”

?  前一进程的退出状态

$  shell进程的进程编号

0         shell程序的名称

最近一个后台命令的进程编号

HOME 当前用户根目录

IFS 内部的字段分隔器,一般设为空格,制表符或换行符

LANG 当前locale 的默认名称

PATH 命令的查找路径

PPID 父进程的进程编号

PWD 当前工作目录

PS1  主要的命令提示符字符串,默认为$

PS2  行继续的提示符,默认为>

PS4  set –x设置的执行跟踪的提示字符串

 

Ÿ  算术展开

shell的算术运算符与C语言里的差不多,优先级与结合性也相同。

shell将置于$((…))中的内容解释为数学运算。

如: echo $((3 && 4))  输出1

     echo $((3 * 100))  输出300

&&||均为快捷运算符,当测试表达式的值确定后就停止执行。

 

Ÿ  退出状态

每一条命令,不管是内置的,shell函数,还是外部的,当它退出时,都会返回一个小的整数值给引用它的程序,该值即代表程序的退出状态。通常0表示成功,即程序执行完成且未遭遇任何问题。

POSIX的结束状态

0         命令成功地退出

1-125  命令不成功第退出。特定的退出值的含义,是由单个单独的命令定义的。

126 命令找到了,但文件无法执行

127 命令找不到

>128 命令因收到信号而死亡

 

exit可用于从shell脚本返回一个退出状态给脚本的调用者

 

Ÿ  if-elif-else-fi语句用于判断

if 测试条件1

then 执行动作1  #可以是多条语句

elif 测试条件2

then 执行动作2  #可以是多条语句

……

elif 测试条件n

then 执行动作n  #可以是多条语句

 

else

执行动作 #可以是多条语句

fi

 

Ÿ  test命令

test expreesion 或者 [ expression ](两边有空格)

test string [ string ] :  string不为null

test –b file [ -b file ]:  file是块设备文件

详细的说明参见man test

 

Ÿ  case语句

case $varname in

pattern1)  pattern1匹配

           执行命令

;;

pattern2)  pattern2匹配

     执行命令

   ;;

*)        默认情况

         .. 执行命令

         ;;

esac

 

Ÿ  for循环

for循环用于重复整个对象列表,依次执行每一个独立对象的循环内容。

如:for var in a.xml b.xml c.xml

         do echo $var

         done

该循环输出每一个xml文件的名字,如果没有指定列表的内容,则shell循环遍历整个命令行参数。

如:for var in

do

               ****多每一个参数进行的处理

done

 

Ÿ  while, until循环,breakcontinue

while conditon                      until conditon         

do                                  do

         statements                               statements

done                                done

 

while循环:只要condition是成功退出或为真,while会继续循环;

until循环:只要conditon未成功结束或为假,until继续循环。

 

breakcontinue:类比C语言中的用法,breakcontinue命令都接受可选的数值参数,可分别用来指出要中断(break)或是继续(continue)多少个被包含的循环。如:

while condition1     外部循环

do    

         while condition2 内部循环

         do

                   break 2    跳出外部循环

         done

done

……               中断之后继续执行

 

阅读(1041) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~