shell的学习(二)shell脚本的基本概念

shell是一种为用户提供一个向Linux系统内核发送请求接口的系统级程序。shell脚本的好处是能够在设定的时间执行指定的任务。这些任务可以是文件分类、向文本插入内容、迁移文件、删除文件等。对于一些循环或耗资源的任务,通过shell脚本就能够得到更好的解决。

1.脚本编写和执行

一个shell脚本至少由两部分组成,考虑到后期的维护,一个比较完整的shell脚本通常由shell解析器、注释和脚本程序3部分组成。其中,解析器的作用是解析脚本的代码;注释是对脚本的作用、编写者及相关重要代码的注释;脚本程序是最重要的部分,是脚本功能的体现。

 说明:第一行的作用是指定解释脚本程序的shell;第2~6行的作用是描述脚本的基本信息;第8~9行是脚本的代码,这是脚本中最有意义的内容。

 对于shell脚本文件的命名,其后缀名为“.sh”(不使用后缀名也是可以的)。脚本的执行,有两种方式(设脚本的文件名为hello.sh)。

  • 使用shell来执行:bash hello.sh
  • 授予脚本可执行权:使用chmod命令为脚本添加x权限,然后通过./hello.sh都方式来执行。

2.脚本执行过程追踪

为了能够准确找到脚本中存在的问题,在测试时可以使用set命令对脚本的执行过程进行跟踪

 使用了set命令后,脚本执行的过程就会被输出到前端,显示在用户面前。

 其中,带有“+”的输出行是由set跟踪到后台执行命令,而未带“+”的则是手动输入或是脚本要输出的信息。

3.shell变量概述

shell中的变量通常分为本地变量与环境变量。变量的作用是存储文件名、文件存储路径以及一些数字和变量等。变量的引入使得shell程序对变量的引用和储存变得简单而有效。

变量是一段有名字的连续存储空间,是程序中数据的临时存放场所。在程序中,通过定义变量来申请并命名变量的存储空间。在shell中定义的变量是无数据形态,因此在使用变量前需要先定义,被定义的变量值就暂存在内存空间,需要时随时被调用。

在变量中所存储的值被称为字符串,字符串是shell中唯一的数据形态。

在Linux操作系统下的变量通常分为环境变量和局部变量两类,

(1)shell的局部变量

局部变量(也称本地变量)就是存在生命周期的变量。被定义的局部变量只是在局部的进程中可见,当进程退出时就会随之消失。

为了给登录到系统的用户提供一个初始化的工作环境,操作系统需要有自己的变量。可以通过set命令来获取系统所定义的最初变量。

(2)shell的环境变量

为了保证系统能够正常运行,Linux系统需定义一些永久性的变量。这些变量的值不会因为程序结束或系统重启而失效,主要用于存储会话和工作环境的信息。

(3)shell的特殊变量

特殊变量通常是指特殊符号,所表示的是一些特定的值。比较常见的特殊变量主要有$*和$@,表示所有位置的参数。其中$*表示的是当前所指定的所有参数,$@表示的是所有指定的参数中的某个参数。$*和$@的每个参数都是由独立双引号引用的字符串,这使得在参数列表中的每个参数都被当成一个独立的值,而且这个值是没有被解释和扩展的。

一般来说,使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

推荐给所有变量加上花括号,这是个好的编程习惯。

已定义的变量,可以被重新定义,如:

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)。

猜你喜欢

转载自www.cnblogs.com/bjlssj/p/11787607.html