Linux Shell 《abs_guide》 学习笔记(1)

来源:互联网 发布:社会经济数据库 编辑:程序博客网 时间:2024/06/06 17:13

 

第一部分

 

1.为什么使用shell

目前流行的Linux shell 被称之为BASH。对于任何想适当精通一些管理知识的人来说,掌握shell脚本都是最基本的;shell脚本遵循典型的UNIX哲学,既把大的复杂的工程分成小规模的子任务,并且把这些部件和工具组合起来。

 

什么时候不使用shell:

资源密集型任务,尤其是需要考虑效率时。(比如排序,hash等);

需要处理大任务的数学操作,尤其是浮点运算等;

有跨平台需求时;

复杂的运用,在必须使用结构化编程时;

对影响系统全局性的关键任务应用;

对于安全有很高要求的任务;

项目由连串的依赖的各个部分组成;

需要大规模的文件操作;

需要多维数组支持;

需要数据结构支持,比如链表或树等数据结构;

需要产生或操作GUI;

需要直接操作系统硬件;

需要I/O或Socket接口;

需要使用库或老代码接口;

私人的,毕源的应用(shell就放在文本文件中,全世界都看得到)。

 

如果你符合上边的任何一条,那么请考虑更强大的语言吧。

 

2.带着一个Sha-Bang(#!)出发

在一个最简单的shell中,一个shell script其实就是一系列系统命令列到一个文件中,最基本的用处就是在你输入这些特定命令时能够少敲一些字。

 

Example 2-1:清除/var/log下的log文件

#######Start Strip#######

1 # Cleanup

2 # 当然要使用root来运行这个脚本

3

4 cd /var/log

5 cat /dev/null > message

6 cat /dev/null > wtmp

7 echo "Logs cleaned up"

#######End Script#######

这根本就没什么稀奇的,只不过是命令的堆积;把所有命令放到一个文件中,好处是不用每次都敲它们。下面我们来看一个真正意义上的脚本,而且我们可以走得更远...

 

Example 2-2:cleanup,一个增强的和广义的删除logfile的脚本

#######Start Strip#######

1 #!bin/bash

2 # 一个bash脚本的正确的开头

3

4 # Clean Version 2

5

6   LOG_DIR = /var/log

7   ROOT_UID = 0 #$UID为0的时候,用户才具有根用户的权限

8   LINES = 50 #默认的保存行数

9   E_XCD = 66 #不能修改目录?

10 E_NOTROOT = 67 #不是根用户,退出

11

12 if [$UID -ne $ROOT_UID]

13 then

14       echo "Must be root user to run this script"

15       exit E_NOTROOT

16 fi

17

18 if [ -n "$1"] #测试是否有命令行参数(非空)

19 then

20       lines = $1

21 else

22       lines = $LINES

23 fi

24

25 cd $LOG_DIR

26 if [`pwd` != $LOG_DIR]

27 then

28      echo "Can't change to $LOG_DIR"

29      exit $E_XCD

30 fi

31

32 tail -$lines message > mesg.temp #保存Log文件的最后部分

33 mv mesg.temp > messages #转换为新的log

34

35 cat /dev/null > 'wtmp'

36 echo "Logs cleaned up."

37

38 exit 0

38 #退出之前返回0表示成功

#######End Script#######

在每个脚本的开头都使用"#!",这意味着告诉你的系统这个文件的执行需要指定一个解释器.#!实际上是一个2 字节的魔法数字,这是指定一个文件类型的特殊标记,这种情况下,指的就是一个可执行的脚本.在#!之后接着是一个路径名.这个路径名指定了一个解释脚本中命令的程序, 这个程序可以是 shell,程序语言或者是任意一个通用程序. 指定的程序从头开始解释并且执行脚本中的命令。
(从#!行下边的一行开始),如:
1 #!/bin/sh

2 #!/bin/bash

3 #!/usr/bin/perl

4 #!/usr/bin/tcl

5 #!/bin/sed -f

6 #!/usr/awk -f

上边每一个脚本头的行都指定了一个不同的命令解释器,#!后边给出的路径名必须是正确的,否则将会出现一个错误消息,通常是"Command not found",这将是你运行这个脚本时所得到的唯一结果.
编写完脚本之后,你可以使用sh scriptname,[5]或者bash scriptname 来调用它.
(不推荐使用sh <scriptname,因为这禁用了脚本从stdin 中读数据的功能.)
更方便的方法是让脚本本身就具有可执行权限,通过chmod 命令可以修改.
比如:
chmod 555 scriptname (允许任何人都具有可读和执行权限) [6]
或:
chmod +rx scriptname (允许任何人都具有可读和执行权限)
chmod u+rx scriptname (只给脚本的所有者可读和执行权限)
既然脚本已经具有了可执行权限,现在你可以使用./scriptname 来测试它了.如果这个脚本
以一个"#!"行开头,那么脚本将会调用合适的命令解释器来运行.

下篇笔记将开始第三章的学习..~(To be continue)

原创粉丝点击