设为首页 收藏本站
查看: 1319|回复: 0

4_Shell语言———脚本概述

[复制链接]

尚未签到

发表于 2018-8-30 08:26:03 | 显示全部楼层 |阅读模式
  一、初识脚本
  简单说,脚本就是数条可执行语句的罗列。例如我们将以下可执行命令粘贴至first.sh 这个文件中:
UserName=user1  
mkdir /users
  
useradd -d /users/$UserName $UserName
  
echo $UserName | passwd --stdin $UserName
  

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

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

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

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

  这种格式在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 的值来执行多次的方式,就是循环执行。
  注:本文是对脚本和语言控制流程的概述,后续文章将对脚本和语言控制流程进行更系统详细的介绍



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-558683-1-1.html 上篇帖子: 3_Shell语言———输入输出重定向和管道概述 下篇帖子: linux系统学习之鸟哥私房菜——shell编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表