脚本的简单介绍


*此文写给刚刚入门Linux学习脚本的小白,文中为方便理解专业词用的不多,若要确切的系统的学习某些概念,还需专门学习,本文仅供参考


在没接触过脚本之前,脚本这个词只在Windows中某些软件出问题了,会提示”当前脚本运行出错“之类的词,当然了,作为一个只会用电脑打英雄联盟和Linux只会基本命令的小白,此时此刻对脚本依旧没什么太大的概念,不过即使如此菜的抠脚,我依旧得用我这智商为负的脑子去死磕这个叫做脚本的东西。
是的没错!在Linux中,会敲命令就会写脚本。运行脚本的是一个叫做“解释器”的东西Linux中默认的解释器是bashshell,还有很多解释器比如Python。会写脚本的话,不说别的,至少不用敲那么多又臭又长的命令了,都丢进脚本文件,执行脚本文件就一切OK了,当然了,看到这篇帖子的各位仁兄应该也学过基本命令了比如最基本的ls , ifconfig ,vim文本编辑器, 以及grep ,egrep 等等基本的文本处理命令,很高兴的告诉你,刚开始学脚本,这些就够了 (大神路过此贴请轻喷蟹蟹)
学IT的同学用腿想都知道,每学一样新语言都从”HelloWorld”开始的,这里也一样

helloworld入门

             #!bin/bash
             # This is first scriptof“hello world”
             echo “hello world”

#!/bin/bash 是脚本调用的解释器名称,(整个脚本除了第一行的#除外,其他行的#都为注释,)
#!/ This is first script of "hello world" 是脚本注释,就是这一行的内容不会执行
打开vim编辑器,照着上面的命令字符敲进去,保存退出并赋予刚刚编写的脚本执行权限

    [root@centos7 ~]# chmod a+x helloworld.sh

当脚本有了执行权限,就可以运行了

    [root@centos7 ~]# ./helloworld.sh
    hello world
    [root@centos7 ~]# 

类似的,刚开始学习嘛,你可以把好多毫不相干的命令都丢进脚本文件里面,执行脚本文件的时候也会把你在脚本文件里面写的命令依次执行并显示在终端,就像下图这样:

LinuxShell脚本从入门到比入门强一点点的坎坷之路

打开vim编辑器把上图中的命令敲进去,然后给脚本文件一个执行权限如下图:
LinuxShell脚本从入门到比入门强一点点的坎坷之路

执行脚本文件如下:

[root@centos7 ~]# ./test.sh

执行结果如下:
LinuxShell脚本从入门到比入门强一点点的坎坷之路

    不是很难对吧?
    太简单?
    好吧,那就加点参数吧
    相信能看到这里的各位同学也应该知道什么是参数了,小弟在此就不再赘述了

带参数的脚本

    先写一个执行需要参数的脚本吧如下:

LinuxShell脚本从入门到比入门强一点点的坎坷之路

重点解释的是$这个东西,不光是美元,还是在Shell脚本中很常见又很关键的一个字符

$1代表位置参数,可以解释为执行脚本文件的同时在后面打一个参数,具体参数以脚本中要求的为准
$(XXX)这个格式为取变量值,图中的意思则为取$(cat $1 |wc -l)的值并赋值给lines
echo是用来输出信息的,大体上应该也能看懂吧,就是取$(XXX)的变量并赋值,然后输出这个值

执行步骤和执行结果如下,注意执行脚本的同时后面的参数啊:
LinuxShell脚本从入门到比入门强一点点的坎坷之路
不用纠结$东西,学好了这东西有的是

参数过滤

上面讲到了参数,不过很显然,不是随便写一个参数就会有输出结果的,比如我想找一个文件有多少行,我在执行脚本的时候后面跟一个IP地址肯定行,不懂的会问cat不是可以查看然后直接输出嘛之类的,cat是用来查看文件的,后面跟的参数是个文件,不是你输入什么就能看到什么的,有这个疑问的同学请转弯回去补补基础吧,不信我给你执行以下cat+IP你看看:

LinuxShell脚本从入门到比入门强一点点的坎坷之路
很明显吧,好了不多说,具体看下参数怎么过滤
grep,egrep ,以及cut ,tr等文本处理工具
就拿IP为例,我想测试一个IP是否可以ping通,前提是要判断IP是否符合IP的条件,比如1192.18.0.256,很明显,首先IP地址的每一位最多三位数,1192就不符合,其次每一位最大值为255,所以256也不符合,所以就需要先判断输入的IP是否符合条件,再执行ping操作,脚本内容如下:
LinuxShell脚本从入门到比入门强一点点的坎坷之路
写完了,那就执行一下看看:
LinuxShell脚本从入门到比入门强一点点的坎坷之路

执行结果很容易理解,可这个脚本内容是不是看起来很复杂?别急,其实上述的所有内容都是一行,只是屏幕显示为多行,很简单的
$1为位置参数,在这里就是要输入的IP地址,
egrep -q 是静默输出,就是执行成功不会有任何提示结果,最长的那段是过滤IP是否符合要求,符合,则执行&&之后的语句,把输入的IP扔给PING命令执行(-c1为只ping一个包,-w1为一秒钟)&> /dev/null则为把输出结果扔掉

具体逻辑关系看下图就明白了:
LinuxShell脚本从入门到比入门强一点点的坎坷之路

if 在脚本中的运用

这个逻辑关系看着不难,但是脚本里面写成这个样子着实不好看,很容易出错,那就用点逻辑清晰的语句来写吧,换一个例子:
例:给定脚本一个参数为普通文件,判断是否为以 .sh结尾的普通文件,是则给其赋予执行权限(x),否则输出“非用户脚本文件”:

LinuxShell脚本从入门到比入门强一点点的坎坷之路
怎么样,感觉挺复杂,不过是不是看起来有条理,不像上一个脚本文件写的那么乱了?
仔细看,相同颜色的框是一个完整的逻辑语句, if里面可以继续用if,需要注意的是要保证语句的完整性,初次使用此类方式需要注意语法错误的同时,要留意不要忘掉类似“fi”这样的结束语句

*每一个IF后面 [ ]里面的关于test和grep等等为在脚本学习之前的内容,在此不再赘述

首先,灰色框是判断文件是否存在,存在,则继续执行红色框;否则,直接输出“文件不存在”脚本执行结束
执行红色框判断给定参数文件是否为普通文件,是,则继续执行蓝色框;否则直接退出,脚本执行结束
执行蓝色框判断是否为“.sh”结尾的文件,是,则为其添加执行权限,否,则输出“非用户脚本文件”,脚本执行结束


  • 心得

由于现阶段关于逻辑判断以及循环语句的学习有限,暂时只能写出这么多,不过前面基础命令以及各个选项都能运用自如的话现在仅用IF写出来的脚本也很不错的,现阶段的脚本都是对给定参数的处理以及基本输出,没有太多复杂的其他东西,基础很重要!十分的重要!!别小看基础命令什么的,就最最基本的 ls命令选项就好几十个,常用的那些都没人保证全部都记得,所以还是要多复习多练,这样写脚本才能运用自如,否则,磕磕绊绊不说,选项记不住,命令功能不清楚,语法格式也不清楚,写脚本一定举步维艰,

    仅以此文,写给在Linux学习道路上一路狂奔的小白们