Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 编程 > Shell > 正文

Shell语言四 脚本概述

时间:2014-05-31 00:22 来源:未知 作者:www.51ou.com 阅读:

一、初识脚本

 

简单说,脚本就是数条可执行语句的罗列。例如我们将以下可执行命令粘贴至first.sh 这个文件中:

1
2
3
4
UserName=user1
mkdir /users
useradd -d /users/$UserName $UserName
echo $UserName | passwd --stdin $UserName

这样first.sh就是一个脚本,sh用来标注这是一个shell脚本,它能够使用以下命令执行:

# bash first.sh

wKiom1NiWFKjmTUJAAPn5COBg3U527.jpg

 

 

二、脚本的执行

上面的例子中我们使用了bash命令来执行 first.sh文件,事实上first.sh是个可执行文件,那么就意为着它可以自我执行而不需要使用bash命令。但是当我们给first.sh加上执行权限,输入 first.sh后提示该命令不存在,这是由于所有在终端中可以直接执行的命令,是能在环境变量中定义过的路径下查找到的,first.sh并没有定义在环境变量中,因此无法直接执行。

# chmod +x first.sh

# first.sh

# echo $PATH

# /root/first.sh //给该文件指定路径,则有可能可以执行

wKioL1NiWHGRl68SAAHe8r3Z6mE040.jpg

之所以说该文件“有可能”可以执行,是因为有时候若不指定具体的解释器,它将无法确定用什么解释器,从而导致无法执行。所以通常情况下在编写脚本时,第一行会用来指定执行该脚本的解释器,增加的这一行在脚本语言中称为 shebang,目的为告诉内核是否可以执行下面的内容,其格式为:

 

#!解释器程序路径

如在first.sh中首行处增加一行:

#!/bin/bash

wKiom1NiWPmzjHHfAAIChni2Vn4589.jpg

 

 

事实上,几乎每一个可执行程序的初始位置都有一个 magic number(魔数),用来标识本程序的格式。Linux上编译的程序无法在Windows上执行,是因为ABI(Application Binary Interface:应用程序二进制接口)不兼容。通常在Linux上编译的程序采用的是ELF格式,例如我们可以使用file命令来查看一个可执行命令:

# file /bin/ls

wKiom1NiWSSjnITYAACZe-aadWc546.jpg

这种格式在Windows上可能无法识别。要鉴别一个文件是否可识别,靠的就是magic number。上述例子中shebang的作用就是告知当前内核,此脚本的magic number是什么,能不能执行。

 

在Linux中的ls命令可以被内核直接执行,是因为它为内核提供了执行入口。执行入口是告诉计算机从什么地方开始执行,比如java和c语言中,main函数就是执行入口;上述first.sh中, #!/bin/bash 也是执行入口。执行入口所在的函数为主函数,所在的程序是主程序。

 

三、语言的控制流程

 

1. 什么是语言的控制流程

还是以first.sh为例,如果我们想同时建立几个用户,可以采用一个笨办法,即将first.sh中现有内容复制几遍,如:

1
2
3
4
5
6
7
8
9
#!/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

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《Shell语言四 脚本概述》技术文章,《Shell语言四 脚本概述》详细使用和说明,有时《Shell语言四 脚本概述》可能不完善、敬请谅解!如果《Shell语言四 脚本概述》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(1)
100%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片