Unix Shell注意问题备忘

系统 其他OS
我们对Unix Shell的基础资料这里也不多介绍,其实网上的相关资料是比较散,加之Shell本身牵扯的东西也比较多,讲解下Unix Shell环境变量。

最近在接触一些Unix Shell的东西,在这个过程中看了不少书籍资料,也受了不少折腾,因此这里把一些需要注意的细节记录下来以作备忘和提醒。这里的Shell是指Bourne Shell,其它类型的Shell我没有用过因此不知道是否存在相同问题。

另外Unix Shell的基础资料这里也不多介绍,其实网上的相关资料是比较散,加之Shell本身牵扯的东西也比较多,其中包括Unix的系统知识,不同版本Shell的语法和功能,正则表达式,管道什么,要一次说清楚也不容易。这里推荐一本书《UNIX shell范例精解》,在学习Shell的过程中它确实帮了不少忙。好,开始备忘。

1、关于Unix Shell环境变量

环境变量的作用域是由上到下的,并且在子进程里改变了环境变量是不会传递回父进程。因此在全局使用的环境变量应该在父进程里定义,子进程或者其它进程定义的环境变量不会能共享访问。环境变量的这个特性对Shell程序的结构有很大的影响。因为如果要使用环境变量作为全局变量使用,那么Shell脚本程序之间就必须保持一种至上向下的调用关系。

Unix Shelll里面没有全局变量的概念,只有环境变量和局部变量。全局变量的解决方案有这么几种:

a.使Shell脚本之间保持一个至上向下的调用关系,然后在父进程中定义环境变量;

b.使用只读局部变量,然后保证所有脚本在同一进程下执行;

c.保存变量在一个config文件内,脚本执行加载;

或者这里说到的全局变量有点常量的味道,毕竟全局变量是可以在过程之间共享信息的,但是上面提及的方法都不可以。如果要过程之间通信估计只有通过参数和返回值了。真正意义上的全局变量怎么实现暂不做探讨。

其实把环境变量加载到Unix的主进程中也可以把它直接当全局变量使用,这个方法是***个方案的特殊使用。

2、使用“.”调用脚本***放在接收参数之后,不然可能会引起“$#”这些特殊变量的值的改变

3、if语句中使用“[]”替换test时,要注意“[]”使用是的空格,例如:if [ "$a" != "" ] then #空格不能省略

4、cp -R 时,要注意目标路径中不需要提供复制后的目录名,例如:cp -R /a /b/ 这样将会把a目录复制到b目录中,复制后的目录仍叫a(此处与xcopy有差别)
另外,cp并不会自动建立目标目录。

5、使用while读取文件时要注意 当使用
 

  1. while read line   
  2. do  
  3. #####  
  4. done < file 

读取文件时,发现文件***一行不会在while内读取。这个问题不知道是不是上面代码的写法问题。这就是这次关于Unix Shell中的知识的讲解。

【编辑推荐】

  1. 提高Unix系统安全性和稳定性
  2. 讲述5种Unix关机方法
  3. 提高Unix系统安全性和稳定性
  4. 使用Unix密钥启用自动登录
  5. unixware进程相关的命令

 

责任编辑:小霞
相关推荐

2010-04-30 01:00:08

Unix shell

2010-05-05 13:22:29

Unix Shell

2010-04-26 12:30:42

Unix Shell

2010-04-26 14:04:18

Unix Shell

2009-09-29 10:45:17

UnixLinuxshell

2009-10-23 13:44:03

linux Shell

2010-05-04 11:59:39

Unix系统

2010-05-04 14:34:16

Unix系统

2010-04-29 14:56:06

Unix系统

2010-05-07 13:43:27

Unix Shell

2010-04-26 13:36:33

Unix Shell

2010-04-26 13:53:47

Unix Shell

2010-04-16 14:46:22

2010-04-07 16:15:04

Unix操作系统

2010-04-21 10:19:40

Unix Shell

2010-04-26 13:28:05

Unix Shell

2010-05-07 13:04:11

Unix Shell

2010-04-14 15:44:10

Unix操作系统

2012-09-20 15:11:31

Unix服务器

2022-05-05 09:31:34

Go语言漏洞
点赞
收藏

51CTO技术栈公众号