一、初识脚本

简单说,脚本就是数条可执行语句的罗列。例如我们将以下可执行命令粘贴至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 的值来执行多次的方式,就是循环执行。

注:本文是对脚本和语言控制流程的概述,后续文章将对脚本和语言控制流程进行更系统详细的介绍

转载于:https://blog.51cto.com/wuyelan/1405411

4_Shell语言———脚本概述相关推荐

  1. OpenCL™(开放计算语言)概述

    OpenCL™(开放计算语言)概述 异构系统并行编程的开准 OpenCL™(开放计算语言)是一种开放的.免版税的标准,用于对超级计算机.云服务器.个人计算机.移动设备和嵌入式平台中的,各种加速器进行跨 ...

  2. 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出

    写在前面 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python等(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准. 之前分享过 ...

  3. python语言安装-Python语言脚本的安装和配置

    Python语言脚本有很广泛的应用,在这一过程中,我们会看到种种的问题.其实只要仔细学习就能解决.下面我们就来详细的学习下相关的技术信息.希望大家有所收获. 目前有许多第三方脚本语言可供直接使用,例如 ...

  4. C语言 | 链表概述

    C语言链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构,是根据需要开辟内存单元. 链表有一个"头指针"变量,它存放一个地址,该地址指向一个元素. 链表中每 ...

  5. Java第一章java语言的概述

    一.java语言的概述: 1.1dos命令 常用的dos命令: dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd..:退回到上一级目录 cd\:退回到根 ...

  6. 信捷触摸屏c语言脚本_信捷触摸屏TG系列产品型号说明及功能介绍

    产品介绍 全新外观设计,比普通款更薄 1677万色,画质细腻无痕,显示效果媲美液晶显示器 下载.启动.运行,三位一体的超高速响应 支持C语言脚本功能,运算.自由协议编写.绘图,提高编程自由度 支持BM ...

  7. Java基础----JAVA语言的概述和开发环境的搭配

    01 JAVA语言的概述和开发环境的搭配 JAVA语言简介 创始人:詹姆斯.高斯林 历史:起初属于sun公司,由高斯林与其合伙人研发而出,用于在各种移动设备上进行程序开发设计,初始起名为green,后 ...

  8. 第一章 C语言程序设计概述

    1 概览 本章介绍以下内容: - 计算机系统架构:硬件和软件 - 编程语言的发展历程及其特性和使用场景 - 主流桌面系统(Windows,Linux,Mac)的C语言开发环境的搭建 - C程序运行在各 ...

  9. 编程语言——标记语言——脚本语言之间的比较

    首先说一下,什么是编程语言,标记语言跟脚本语言: 编程语言(programming language):是用来定义计算机程序的形式语言.它是一种被标准化的交流技巧,用来向计算机发出指令.一种计算机语言 ...

最新文章

  1. AI一分钟 | 浙大研发出“踢不倒”的四足机器人;富士康冲击A股上市,AI为最大卖点
  2. 计算机和人类“看”法不同,但这重要么?
  3. 【配置】固定资产组织结构配置
  4. [网络安全自学篇] 二十四.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例
  5. 运营商与厂商发力 智能机进入700元以下时代
  6. 将数据从MySql导入数据至SQL Server 2000
  7. 特斯拉自动驾驶要命?大白天忽然开启”自杀模式“
  8. linux系统网络命令(六)
  9. 微信公众号自动发布文章
  10. 学完 Fluent 官方基础教程,你离一名合格Fluent 流体工程师还有多远?
  11. 《HTML5从入门到精通》中文学习教程
  12. java获取本机ip_java获取本机IP
  13. 论能逼疯一个人的nvidia显卡驱动在ubuntu16.04上的安装
  14. 北航计算机博士后,北京航空航天大学博士后待遇
  15. python lamba表达式
  16. 区块链知识系列 - BTC和ETH的区别
  17. 微信小程序——校园服务小程序(二)校园论坛加预约理发服务
  18. background-position,有逗号和没逗号:截然不同的结果
  19. 抖音多账号批量上传视频软件
  20. Kodi皮肤乱码改中文设置-Arctic: Zephyr- Reloaded

热门文章

  1. quartz 两个java_spring boot整合quartz实现多个定时任务的方法
  2. Windows下安装Python扩展模块提示“Unable to find vcvarsall.bat”的问题(转载)
  3. [HNOI 2014]画框
  4. 国内外开源与 SaaS ,团队协作平台、项目管理工具整理
  5. ecside使用笔记(1)
  6. ASP.NET三层数据操作与GridView互动
  7. c# typeof() 和 GetType()的区别
  8. clipse3.2/3.3中指定第三方包(JAR)和类路径(CLASSPATH)的几个方法(转做笔记)
  9. Shiro结合Redis解决集群中session同步问题
  10. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法