一、初识脚本
简单说,脚本就是数条可执行语句的罗列。例如我们将以下可执行命令粘贴至first.sh 这个文件中:
UserName=user1 mkdir /users useradd -d /users/$UserName $UserName echo $UserName | passwd --stdin $UserName
这样first.sh就是一个脚本,sh用来标注这是一个shell脚本,它能够使用以下命令执行:
# bash first.sh
二、脚本的执行
上面的例子中我们使用了bash命令来执行 first.sh文件,事实上first.sh是个可执行文件,那么就意为着它可以自我执行而不需要使用bash命令。但是当我们给first.sh加上执行权限,输入 first.sh后提示该命令不存在,这是由于所有在终端中可以直接执行的命令,是能在环境变量中定义过的路径下查找到的,first.sh并没有定义在环境变量中,因此无法直接执行。
# chmod +x first.sh
# first.sh
# echo $PATH
# /root/first.sh //给该文件指定路径,则有可能可以执行
之所以说该文件“有可能”可以执行,是因为有时候若不指定具体的解释器,它将无法确定用什么解释器,从而导致无法执行。所以通常情况下在编写脚本时,第一行会用来指定执行该脚本的解释器,增加的这一行在脚本语言中称为 shebang,目的为告诉内核是否可以执行下面的内容,其格式为:
#!解释器程序路径
如在first.sh中首行处增加一行:
#!/bin/bash
事实上,几乎每一个可执行程序的初始位置都有一个 magic number(魔数),用来标识本程序的格式。Linux上编译的程序无法在Windows上执行,是因为ABI(Application Binary Interface:应用程序二进制接口)不兼容。通常在Linux上编译的程序采用的是ELF格式,例如我们可以使用file命令来查看一个可执行命令:
# file /bin/ls
这种格式在Windows上可能无法识别。要鉴别一个文件是否可识别,靠的就是magic number。上述例子中shebang的作用就是告知当前内核,此脚本的magic number是什么,能不能执行。
在Linux中的ls命令可以被内核直接执行,是因为它为内核提供了执行入口。执行入口是告诉计算机从什么地方开始执行,比如java和c语言中,main函数就是执行入口;上述first.sh中, #!/bin/bash 也是执行入口。执行入口所在的函数为主函数,所在的程序是主程序。
三、语言的控制流程
1. 什么是语言的控制流程
还是以first.sh为例,如果我们想同时建立几个用户,可以采用一个笨办法,即将first.sh中现有内容复制几遍,如:
#!/bin/bash UserName=user4 mkdir /users useradd -d /users/$UserName $UserName echo $UserName | passwd --stdin $UserName UserName=user5 mkdir /users useradd -d /users/$UserName $UserName echo $UserName | passwd --stdin $UserName
2.语言控制结构
编程语言主要有两类,一种是面向过程的编程语言,一种是面向对象的编程语言。前者关注的是解决问题的步骤,后者则是将解决问题的方法封装抽象到类中。在面向过程的编程语言中,语言控制结构主要有以下三种:
a)顺序执行:一句一句逐行执行;
b)选择执行:有多条语句,但不全部执行,而是根据条件有选择的执行;
c)循环执行:将某些语句来回执行多次。上述脚本first.sh中如果不采用将部分代码简单复制多次,而是只改变 $UserName 的值来执行多次的方式,就是循环执行。
注:本文是对脚本和语言控制流程的概述,后续文章将对脚本和语言控制流程进行更系统详细的介绍
本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1405411
4_Shell语言———脚本概述,布布扣,bubuko.com
原文地址:http://wuyelan.blog.51cto.com/6118147/1405411