Q:什么是Shell,什么是shell脚本?
A:Shell是一种用C语言编写的程序,它是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。它是命令语言、命令解释程序及程序设计语言的统称。它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。
命令解释程序:shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。它由输入设备读取用户输入的命令,再将其转为计算机可以了解的机械码,然后执行它。
命令语言:它互动式地解释和执行用户输入的命令。当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。 一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。 当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。
程序设计语言(也就是shell脚本):shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。任何在提示符中能键入的命令都能放到一个可执行的shell程序中。 作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。简单的说shell脚本就是一个包含若干行Shell或者Linux命令的文件。对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来。以便日后重复使用
第一个shell程序,此程序保存为mayuan.sh文件(通常shell脚本以.sh为后缀):
#! :这是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell。如:#!/bin/sh,#!/bin/bash,#!/bin/csh,#!/bin/tcsh和,#!/bin/ksh等。
第二行以 # 开头,代表是注释行,会被解释器忽略。除了第一行以外,其他行以 # 开头都是注释行;sh里没有多行注释,只能每一行加一个#号。如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。
第三行定义了一个变量name,值为:mayaun 。注意变量名(name)和 = 间不能有空格,否则执行脚本时会提示command not found。
第四行echo:命令用于向窗口输出文本。$(美元符号)表示变量替换,即用其后面指定的变量的值来代替变量。
执行shell脚本有两种方法:
1、作为可执行程序
将代码保存为mayuan.sh,并cd到相应目录:
chmod +x ./mayuan.sh #使脚本具有执行权限
./mayuan.sh #执行脚本
注意,一定要写成./mayuan.sh,而不是mayuan.sh,运行其它二进制的程序也一样,直接写mayuan.sh,linux系统会去PATH里寻 找有没有叫mayuan.sh的,而只有/bin, /sbin, /usr/bin,/usr/sbin等在PATH里,你的当前目录通常不在PATH里,所以写成mayuan.sh是会找不到命令的,要用. /mayuan.sh告诉系统说,就在当前目录找。如下图所示:
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如:
/bin/bash mayuan.sh
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。