环境:
root@sn001:~# uname -a
Linux sn001 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013 i686 i686 i386 GNU/Linux
root@sn001:~# bash -version
GNU bash, 版本 4.2.25(1)-release (i686-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html>
这是*软件,您可以*地更改和重新发布。在法律允许的范围内没有担保.
1.source,sh,bash以及./有什么区别?
<1>共同点:
使用格式:CMD FileName,其中CMD用source,sh,bash以及./替代即可,如source FileName。
<2>差异
source作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限", source命令(从 C Shell 而来)是bash shell的内置命令,该命令通常可用命令“.”来替代。
sh和bash 作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限",两者在执行文件时的不同,是分别用自己的shell来执行文件。
./ 作用:打开一个子shell来读取并执行FileName中命令。该filename文件需要有"执行权限",具体使用那一个shell来执行文件,由shebang(#!)后的路径决定。
2.Linux 脚本编写基础
1.1 开头#! 简介
1.1 #! 简介
shell脚本通常是一个以#!为起始的文本文件,这个字符(#!)被称为shebang,一般使用#! /bin/bash或#! /bin/sh,前者使用得更多。#! /bin/bash或#! /bin/sh是有差异的,具体差异需要动手编程才能体会。
程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
当编辑好脚本时,如果要执行该脚本,还必须使其可执行。
要使脚本可执行:
编译 chmod +x filename 这样才能用./filename 来运行
1.1.2 注释
在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。
如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。
1.1.3 变量
在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:
#!/bin/sh
#对变量赋值:
a="hello world"
# 现在打印变量a的内容:
echo "A is:"
echo $a
有时候变量名很容易与其他文字混淆,比如:
num=2
echo "this is the $numnd"
这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
num=2
echo "this is the ${num}nd"
这将打印: this is the 2nd
1.1.4 环境变量
由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。 1.1.shell和shell脚本的区别 shell是什么呢?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。